4

When I

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

the last line value is 0. But when I

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

the value is correct.

I'm using SQLite, DbLinq and DbMetal.

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语句。

第二个表达式在 SQL 中有一个等于: Where IsAproved is null

但第一个表达式不是,因为它是数据库中的值与 C# 可为空的变量之间的比较。

为了解决它,我建议尝试:

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();

然后你应该联系 微软,让他们知道这种行为有多可怕。

于 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 回答