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

Aggregate 拡張メソッドを使用できます。

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