与linq中的null进行比较

本文关键字:比较 null linq 中的 | 更新日期: 2023-09-27 17:58:04

我使用EF作为ORM。我的数据库中有一个表"Menu",其列"parentID"(nvarchar)可以为NULL。我想要所有parentId==NULL的菜单。当我写这篇文章的时候,它就是工作(菜单有所有必要的辅助菜单):

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

但这个代码不起作用(菜单等于空):

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

有人能解释为什么吗?

与linq中的null进行比较

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
string parentId == null;

应该是:

string parentId = null;