2016-05-13 11 views
0

のフィルタは、私がNULL可能でないフィールドを持っているところ後(NumC#のエンティティフレームワークを選択し、最大ではないNULL可能フィールド

class MyTable 
{ 
    //... 
    public int Num { get; set; } 
    public string Category { get; set; } 
    //... 
} 

は、問題が発生した最大NumCategory == "A"

var maxnum = myTable 
    .Where(r => r.Category == "A") 
    .Max(r => r.Num); 

のために検索したいときがありますcategory == "A"の記録はありませんでした。 Where()の結果はnullであるため、Max()の結果はnullになりますが、Numがnullableでない場合、例外が発生しました。

テーブルデザインでNumをnullableに設定することで修正できますが、Numには値があり、nullableであってはならないが、この解決法は気に入らない。

提案がありますか? Numがnull値ではない間にNumの値を受け入れる方法はありますか?またはより良いクエリ?

+0

クエリの 'Where(r => r.Category.Equals(" A ")'部分がヌルで、 'Num'がヌル可能でない場合、私はあなたに例外を与えることを期待しますCategory.Equals( "A") 'のような' Num'のレコードはありません?DefaultIfEmpty'を見てください –

+0

[DefaultIfEmpty()](https://msdn.microsoft.com/en-us/library/)を参照してください。 bb360179(v = vs.100).aspx) – sammarcow

答えて

5
int maxShoeSize = Workers.Where(x => x.CompanyId == 8) 
        .Select(x => x.ShoeSize) 
        .DefaultIfEmpty(0) 
        .Max(); 

参照:Max return value if empty query

+0

OK重複した質問!検索でその質問を見つけることができなかったのに、とにかくその質問にいくつかのタグを追加すると、後でより良い検索結果に役立つかもしれません。 – Hamid

2

はテンキーがNULL可能でない間、私はnumのNULL値を受け入れる方法はありますか?

あなたができることを確認:

//... 
.Max(r => (int?)r.Num); 

すべての非NULL可能値がNULL可能(ただし、その逆)に変換することができます。私は個人的には、このメソッド(例外メッセージでは実際に示唆されています)を好みます。これは、最大値と最大値が0(ゼロ)またはint.MinValueであることを区別できるためです。

+0

UP私はDefaultIfEmptyがそのような質問のためのより良い解決策だと思いますが、あなたがアドバイスしたように空で0を得たくない方が良いです。 – Hamid

0

あなたは試すことができます:

var maxnum = myTable 
    .Where(r => r.Category == "A") 
    .Max(r => r.Num) ?? 0; 

その後、あなたは0結果で作業することができます。

関連する問題