0

为什么 GetOrders() 不返回任何元素我得到一个 InvalidOperationException 序列中没有元素。

   int maxNumber = GetOrders().Max(o => o.Number);

我该如何解决这个问题,所以我得到整数默认值,当序列为空时为 0,否则我想要最大值是序列不为空。

4

4 回答 4

2

不使用 Linq,你可以做一些简单的事情,比如

var myOrders = GetOrders();
int maxNumber = myOrders.Any() ? myOrders.Max(o => o.Number) : 0;
于 2012-11-19T22:01:23.883 回答
2

您可以使用以下重载Enumerable.DefaultIfEmpty

int maxNumber = GetOrders().DefaultIfEmpty(new Order { Number = 0 }).Max(o => o.Number);

如果你只是想选择int值,这种方法更简单:

int maxNumber = GetOrders().Select(o => o.Number).DefaultIfEmpty(0).Max(o => o);
于 2012-11-19T22:04:54.120 回答
1

或者:

int maxNumber = GetOrders().Max( o => (int?) o.Number ) ?? 0;
于 2012-11-19T22:06:42.553 回答
0

您可以使用聚合扩展方法。

var max = elements2.Aggregate(0, (m, o) => Math.Max(m, o.Number));
于 2012-11-19T22:06:30.480 回答