私が
bool? isApproved = null;
db.Table.Where(item => item.IsApproved == isApproved).Count();
最後の行の値は0です。
db.Table.Where(item => item.IsApproved == null).Count();
値は正しいです。
私はそれがこのように行われるのを見ました:
db.Table.Where(
item => item.IsApproved.HasValue == isApproved.HasValue &&
(!item.IsApproved.HasValue || item.IsApproved.Value==isApproved.Value )
).Count();
さて、私は以前にこの問題を抱えていました。問題はLINQクエリをSQLステートメントに変換することにあることを覚えています。
2番目の式のSQLには、次のような同等のものがあります。
Where IsAproved is null
ただし、最初の式は、データベース内の値とC#null許容変数との比較であるため、そうではありません。
それを解決するために、私は試してみることをお勧めします:
db.Table.Where(item => isApproved != null ? item.IsApproved == isApproved.Value
: item.IsApproved == null).Count();
この投稿を見る
あなたは使用する必要があります
db.Table.Where(item => item.IsApproved.Equals(isApproved)).Count();
次に、Microsoftに連絡 して、この動作がどれほどひどいのかを知らせてください。
パフォーマンスヒットについてはわかりませんが、機能します
bool? isApproved = null;
db.Table.Where(item => item.IsApproved == isApproved ||
!(item.IsApproved.HasValue || isApproved.HasValue))
.Count();
試す :
db.Table.Where(item => item.IsApproved == isApproved.Value).Count();