【发布时间】:2009-07-28 15:25:32
【问题描述】:
我有一个 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 传入 null 时(目前只有 null parentID 的数据)并且我没有得到任何结果。
我将此查询复制并粘贴到 LinqPad 中并运行以下命令:
from doc in dbContext.Documents
where doc.ParentID == null
select doc
我按预期返回了一个结果集...
实际的查询已经离开了连接和其他连接,但我已经删除了它们并对其进行了测试并得到了相同的结果,因此连接不会影响任何东西。该应用程序和 LinqPad 也都连接到同一个数据库。
编辑:在应用程序查询中仅使用“null”进行测试,它按预期返回结果,因此问题是使用 null 与 int?我已经更新了问题,以便其他有相同问题的人找到此线程。
【问题讨论】:
-
您是否尝试过使用 null 而不是可以为 null 的 parentID 来修改您的编译代码?我的猜测是 LINQ 正在对可为空的 int 进行某种类型推断,并且没有正确处理 null 大小写……但我不确定,所以我不会作为答案发布。
-
不,我还没有尝试过。目前无法访问代码来测试东西,直到今天晚些时候。我会尝试,但如果它有效,它仍然不能解决传入可为空的 int 的问题。我还将比较两个查询生成的 SQL,一位同事提到我也应该尝试一下。它仍然不能解决我的问题。
标签: c# linq linq-to-sql linqpad