【问题标题】:Comparing with null in linq [duplicate]与linq中的null比较[重复]
【发布时间】:2013-02-07 21:48:08
【问题描述】:

我使用 EF 作为 ORM。我的数据库中有表“菜单”,其中列“parentID”(nvarchar)可以为NULL。我想获得所有具有 parentId == NULL 的菜单。当我写这个时,它的工作(菜单有所有nesseccary菜单):

using (var db = new MyDbContext())
{                    
    IEnumerable<Menu> menus = db.Menus.Where(m => m.ParentId == null).ToList();
}

但是这段代码不起作用(菜单等于 null):

using (var db = new MyDbContext())
{    
    string parentId = null;
    IEnumerable<Menu> menus = db.Menus.Where(m => m.ParentId == parentId).ToList();                    
}

谁能解释一下原因?

【问题讨论】:

  • 你确定它是 null 而不是空列表吗? ToList() 应该永远返回 null 似乎很奇怪。另外,您确定您有与正在使用的“parentId”匹配的项目吗?
  • Julien Lebosquain,非常感谢!这是我发现的。

标签: c# entity-framework


【解决方案1】:

1) 写作时:

.Where(m => m.ParentId == parentId)

它转换为 T-SQL 为:

WHERE ParentId=null -- incorrect T-SQ evaluation against NULL

2) 写作时:

.Where(m => m.ParentId == null)

它转换为 T-SQL 为:

WHERE ParentId IS NULL -- correct T-SQL evaluation against NULL

【讨论】:

    【解决方案2】:
    string parentId == null;
    

    应该是:

    string parentId = null;
    

    【讨论】:

    • 年,我现在 :) 对不起,我的帖子有误。
    • 仅在帖子中?问题还存在吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2019-09-14
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多