entity-framework - 为什么 null 和对 null 的引用不是一回事

标签 entity-framework c#-4.0 null nullable

为什么这两种方法的工作方式不同:

    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/

相关文章:

c# - 定期更改基础 EF 模型的最佳替代方案

c# - WCF 数据集压缩

c# - 为什么委托(delegate)不处理事件 null

python - python 中的 ODO 命令以及如何使用简单命令将 CSV 中丢失的文件上传为 NULL

mysql - 已经使用 IS NULL 函数,但仍然返回 NULL 值

c# - Entity Framework 查询说找不到我从未指定的列的列

sql - 如何在 SQL Profiler 或任何其他工具中监视事务隔离级别更改

c# - 验证 30000 没有为小数列指定类型

c#-4.0 - C#TableLayoutPanel替换控件?

c# - 如何检查输入的十进制值是否大于十进制列表