为什么这两种方法的工作方式不同:
public List<Foo> GetFoos()
{
int? parentId = null;
var l = _dataContext.Foos.Where(x => x.ParentElementId == parentId).ToList();
return l;
}
public List<Foo> GetFoos()
{
var l = _dataContext.Foos.Where(x => x.ParentElementId == null).ToList();
return l;
}
第一个没有返回任何内容。第二个返回预期的内容。数据来自EF。 ParentElementId
可为空。
最佳答案
这是因为您无法与 SQL 中的 null 进行比较,它有特殊的 IS NULL
运算符来检查 null 值。
第一个查询将被转换为比较,其中参数为空:
WHERE ParentElementId = @param
这不起作用,因为比较两个空值不会产生 true。
第二个查询将被转换为空检查,因为空值是一个常量:
WHERE ParentElementId IS NULL
这是有效的,因为 EF 不会被愚弄将其转换为比较。
关于entity-framework - 为什么 null 和对 null 的引用不是一回事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6298349/