获取集合中属性的最大值,或者在序列为空时返回零

时间:2012-11-19 21:57:50

标签: c# linq

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

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

如何修复此问题,以便在序列为空时获取整数默认值0,否则我希望最大值是序列不为空。

4 个答案:

答案 0 :(得分:2)

如果不使用Linq,您可以执行简单的操作,例如

var myOrders = GetOrders();
int maxNumber = myOrders.Any() ? myOrders.Max(o => o.Number) : 0;

答案 1 :(得分: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);

答案 2 :(得分:1)

或者:

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

答案 3 :(得分:0)

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

var max = elements2.Aggregate(0, (m, o) => Math.Max(m, o.Number));