开发者

How to select null values with LINQ to SQL and DbLinq?

开发者 https://www.devze.com 2023-03-09 15:13 出处:网络
When I bool? isApproved = null; db.Table.Where(item => item.IsApproved == isApproved).Count(); the last line value is 0. But when I

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.


I have seen it done like this:

 db.Table.Where(
            item => item.IsApproved.HasValue == isApproved.HasValue && 
            (!item.IsApproved.HasValue || item.IsApproved.Value==isApproved.Value ) 
 ).Count();


Well, I had this problem before, I remember that the problem is in converting the LINQ query to a SQL statement.

The second expression has an equal in SQL that: Where IsAproved is null

but the first expression does not because it is a comparision between a value in the database with a C# nullable variable.

To solve it, I would suggest to try:

db.Table.Where(item => isApproved != null ? item.IsApproved == isApproved.Value 
                                          : item.IsApproved == null).Count();


See this post

You should use

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

Then you should contact Microsoft and let them know how terrible this behavior is.


I don't know about the performance hit, but it works

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


Try :

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

0

精彩评论

暂无评论...
验证码 换一张
取 消