在linq中与null比较

时间:2013-02-07 13:07:46

标签: c# entity-framework

我使用EF作为ORM。我的数据库中的表“Menu”包含“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();                    
}

有人可以解释原因吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

string parentId == null;

应该是:

string parentId = null;