24

私は次のクエリを持っています:

var maxNumber = dbContext.Where(a => a.Id == 9).Max(a => a.Sample_Num);

9のIDがない場合、エラーが発生します。Idが9でない場合、デフォルトで結果を0にするのが好きです。

私は試した:

var maxNumber = dbContext.Where(a => a.Id == 9).Max(a => a.Sample_Num) ?? 0; 

他のバリエーションと同様に、それを機能させることができませんでした

4

3 に答える 3

88

Any一致する要素があるかどうかを確認するために使用できます。

int maxNumber = 0;
var id9 = dbContext.Where(a => a.Id == 9);
if(id9.Any())
{
    maxNumber = id9.Max(a => a.Sample_Num);
}

またはあなたは使用することができますDefaultIfEmpty(defaultValue)

int maxNumber = dbContext
    .Where(a => a.Id == 9)
    .Select(a => a.Sample_Num)
    .DefaultIfEmpty(0)
    .Max();
于 2012-09-13T21:01:19.747 に答える
7

Maxのnull許容バージョンを使用するだけです(集約された値はnull許容ではありませんが)。 var maxNumber = dbContext.Where(a => a.Id == 9).Max(a => (int?)a.Sample_Num) ?? 0;

それはほとんどネイトが試みたものです。重要なのは、Max of nullablesは結果として空のコレクションからnullを与えるのに対し、Max of intsはその戻り値がコレクションの既存のintであるため、例外を与えるということです。そのタイプの結果を明示的に宣言することにより、強制的にMax <int?>にします。次に、??の後に目的のデフォルト値を指定できます。

于 2020-09-03T15:38:31.753 に答える
2

何も変換せずに、MaxOrDefaultの簡単な実装を試すことができます。Max関数内のセレクターパラメータを確認するだけです。

var maxNumber = dbContext.Where(a => a.Id == 9).Max(a => a?.Sample_Num) ?? 0;
于 2021-05-05T16:19:52.083 に答える