与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();
}
有人能解释为什么吗?
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;