如何使用 LINQ to SQL 和 DbLinq 选择空值?

发布于 2024-11-12 06:00:53 字数 502 浏览 0 评论 0原文

当我

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

最后一行值为 0 时。但是当我时

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

该值是正确的。

我正在使用 SQLiteDbLinqDbMetal

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

只有一腔孤勇 2024-11-19 06:00:53

我见过这样做的:

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

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();
我恋#小黄人 2024-11-19 06:00:53

嗯,我以前遇到过这个问题,我记得问题在于将 LINQ 查询转换为 SQL 语句。

第二个表达式在 SQL 中具有等于:
其中 IsAproved 为 null

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

为了解决这个问题,我建议尝试:

db.Table.Where(item => isApproved != null ? item.IsApproved == isApproved.Value 
                                          : item.IsApproved == null).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();
非要怀念 2024-11-19 06:00:53

参阅这篇文章

请 应该使用

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

那么你应该 联系人 Microsoft 并让他们知道这种行为有多么可怕。

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.

北凤男飞 2024-11-19 06:00:53

我不知道性能会受到什么影响,但它确实有效

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

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();
dawn曙光 2024-11-19 06:00:53

尝试 :

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

Try :

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文