GetOrders() が要素を返さない理由 シーケンスに要素がないという InvalidOperationException を取得します。
int maxNumber = GetOrders().Max(o => o.Number);
これを修正するにはどうすればよいですか。シーケンスが空の場合は 0 である整数のデフォルト値を取得します。それ以外の場合は、シーケンスが空でない場合に最大値が必要です。
Linq を使用しなくても、次のような単純なことを行うことができます
var myOrders = GetOrders();
int maxNumber = myOrders.Any() ? myOrders.Max(o => o.Number) : 0;
次のオーバーロードを使用できます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);
または:
int maxNumber = GetOrders().Max( o => (int?) o.Number ) ?? 0;
Aggregate 拡張メソッドを使用できます。
var max = elements2.Aggregate(0, (m, o) => Math.Max(m, o.Number));