为什么GetOrders()不返回任何元素我得到InvalidOperationException,序列中没有元素。
int maxNumber = GetOrders().Max(o => o.Number);
如何修复此问题,以便在序列为空时获取整数默认值0,否则我希望最大值是序列不为空。
答案 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));