4

私が

bool? isApproved = null;
db.Table.Where(item => item.IsApproved == isApproved).Count();

最後の行の値は0です。

db.Table.Where(item => item.IsApproved == null).Count();

値は正しいです。

私はSQLiteDbLinqDbMetalを使用しています。

4

5 に答える 5

2

私はそれがこのように行われるのを見ました:

 db.Table.Where(
            item => item.IsApproved.HasValue == isApproved.HasValue && 
            (!item.IsApproved.HasValue || item.IsApproved.Value==isApproved.Value ) 
 ).Count();
于 2011-06-01T14:30:15.127 に答える
1

さて、私は以前にこの問題を抱えていました。問題はLINQクエリをSQLステートメントに変換することにあることを覚えています。

2番目の式のSQLには、次のような同等のものがあります。 Where IsAproved is null

ただし、最初の式は、データベース内の値とC#null許容変数との比較であるため、そうではありません。

それを解決するために、私は試してみることをお勧めします:

db.Table.Where(item => isApproved != null ? item.IsApproved == isApproved.Value 
                                          : item.IsApproved == null).Count();
于 2011-06-01T14:30:37.660 に答える
1

この投稿を見る

あなたは使用する必要があります

db.Table.Where(item => item.IsApproved.Equals(isApproved)).Count();

次に、Microsoftに連絡 して、この動作がどれほどひどいのかを知らせてください。

于 2011-06-01T14:54:36.730 に答える
0

パフォーマンスヒットについてはわかりませんが、機能します

bool? isApproved = null;
db.Table.Where(item => item.IsApproved == isApproved || 
                     !(item.IsApproved.HasValue || isApproved.HasValue))
    .Count();
于 2011-06-01T14:31:48.637 に答える
-1

試す :

db.Table.Where(item => item.IsApproved == isApproved.Value).Count();

于 2011-06-01T14:30:43.360 に答える