Как выбрать нулевые значения с LINQ to SQL и DbLinq? - PullRequest
4 голосов
/ 01 июня 2011

Когда я

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

, значение последней строки равно 0. Но когда я

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

, значение верное.

Я использую SQLite , DbLinq и DbMetal .

Ответы [ 5 ]

2 голосов
/ 01 июня 2011

Я видел, как это сделано так:

 db.Table.Where(
            item => item.IsApproved.HasValue == isApproved.HasValue && 
            (!item.IsApproved.HasValue || item.IsApproved.Value==isApproved.Value ) 
 ).Count();
1 голос
/ 01 июня 2011

См. этот пост

Вы должны использовать

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

Тогда вам нужно связаться Microsoft и позволитьзнаю, как ужасно это поведение.

1 голос
/ 01 июня 2011

Ну, у меня была эта проблема раньше, я помню, что проблема заключается в преобразовании запроса LINQ в оператор SQL.

Второе выражение в SQL равно, что: Where IsAproved is null

но первое выражение не так, потому что это сравнение значения в базе данных с переменной C #, допускающей значение n *.

Чтобы решить ее, я бы предложил попробовать:

db.Table.Where(item => isApproved != null ? item.IsApproved == isApproved.Value 
                                          : item.IsApproved == null).Count();
0 голосов
/ 01 июня 2011

Я не знаю о падении производительности, но оно работает

bool? isApproved = null;
db.Table.Where(item => item.IsApproved == isApproved || 
                     !(item.IsApproved.HasValue || isApproved.HasValue))
    .Count();
0 голосов
/ 01 июня 2011

Попробуйте:

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

...