LINQ查询工作与空,但不是int? 在where子句(Linq query works wit

2019-06-27 00:46发布

我有这样一个LINQ查询功能(简化):

public IList<Document> ListDocuments(int? parentID)
{
    return (
        from doc in dbContext.Documents
        where doc.ParentID == parentID
        select new Document
        {
            ID = doc.ID,
            ParentID = doc.ParentID,
            Name = doc.SomeOtherVar
        }).ToList();
}

现在,由于某种原因,当我通过在空的的parentID(目前仅与空parentIDs数据)和我没有得到任何结果。

我复制并粘贴到查询和LinqPad运行以下:

from doc in dbContext.Documents
where doc.ParentID == null
select doc

我回来预期的结果集...

实际查询左连接的等加入,但我已删除他们和测试,并得到相同的结果,因此加入不影响任何东西。 该应用程序和LinqPad都连接到同一数据库为好。

编辑:测试与在机应用查询只是“空”,并如预期那么问题是使用空VS INT返回结果? 我已经更新的问题,使之更加有用的其他有同样问题找到这个线程。

Answer 1:

文字null值比可能为空参数处理方式不同。 当你明确地测试对null ,生成的SQL会使用IS NULL操作,但是当你使用一个参数,它将使用标准=运营商,这意味着没有行会匹配,因为在SQL null不等于什么。 这是在LINQ to SQL更恼人的.NET / SQL语义不匹配的一个。 要解决它,你可以使用一个类似条款:

where doc.ParentID == parentID || (doc.ParentID == null && parentID == null)


Answer 2:

您可以使用也类似...

from doc in dbContext.Documents
where doc.IsParentIDNull()
select doc

它为我工作! 希望它能为你工作!



文章来源: Linq query works with null but not int? in where clause