LINQ to SQL 检查空值

7

我的数据库字段int_ParentId包含一个Null值。我该如何在这个Linq查询中检查它是否为空?它目前无法工作。

  return _db.Categories.Where(m => m.int_ParentId==null);
4个回答

27

你是否将数据库字段int_ParentId映射为int?类型(例如:<Column Name="int_ParentId" Type="System.Int32" DbType="Int" CanBeNull="true" />)?如果是,请检查以下两点:

return _db.Categories.Where(m => m.int_ParentId == null);

并且

return _db.Categories.Where(m => m.int_ParentId.HasValue);

应该可以工作。


1
完美 - 正是我所寻找的。 - J King

6

鉴于您提供的上下文不足,实际上很难回答这个问题,但通常_db.Categories.Where(m => m.int_ParentId.Equals(null));能够满足您的需求。

在CTS(.NET类型系统)和SQL类型系统之间存在一些差异。

请参阅SQL-CLR Type Mismatches - MSDNNull Semantics - MSDN以获取完整的参考信息。

特别是null会引起麻烦,如果您没有足够的注意,因为它在各自的类型系统中具有两种完全不同的含义。 在SQL中,NULL表示“缺少值,将匹配任何比较”,而在.NET中,null表示“没有对象,与null进行比较将始终产生false”。


2

我认为你想使用对象的Equals方法:

return _db.Categories.Where(m => m.int_ParentId.Equals(null)); 

0

我在这种情况下已经使这个查询工作了

YourContext db = new YourContext();
List<entity> list =  (from n in db.YourEntity
                     where n.FieldToCheck.Equals(null)
                     select n).ToList();

希望能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接