【问题标题】:How to select null values with LINQ to SQL and DbLinq?如何使用 LINQ to SQL 和 DbLinq 选择空值?
【发布时间】:2011-06-10 23:44:06
【问题描述】:

当我

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

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

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

值正确。

我正在使用SQLiteDbLinqDbMetal

【问题讨论】:

  • How can i query for null values in entity framework? 的可能重复项(请注意,该解决方案同时处理 L2SQL 和 L2EF)
  • 所以你的使用Linq2Sql...?
  • @Magnus Linq2Sql 和 DbLinq 是互斥的吗?我以为你在使用 DbLinq 时必须使用 Linq2Sql
  • @BlueRaja 我测试过但解决方案不起作用
  • @Jader:DbLinq 与 Linq-to-SQL 不同。 Linq-to-SQL 指的是特定的 Microsoft 技术

标签: c# .net linq-to-sql sqlite dblinq


【解决方案1】:

我见过这样做的:

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

【讨论】:

  • 我添加了一个我正在使用的类似答案。但你的也一样好用。
【解决方案2】:

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

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

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

要解决它,我建议尝试:

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

【讨论】:

    【解决方案3】:

    this post

    你应该使用

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

    那你应该contactMicrosoft,让他们知道这种行为有多可怕。

    【讨论】:

      【解决方案4】:

      我不知道性能下降,但它有效

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

      【讨论】:

        【解决方案5】:

        试试:

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

        【讨论】:

        • 当 isApprove 为空时会崩溃
        猜你喜欢
        • 2011-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-26
        • 1970-01-01
        • 1970-01-01
        • 2011-04-20
        相关资源
        最近更新 更多