2011-03-07 69 views
7

我的数据库字段int_ParentId包含一个空值。我将如何检查这个linq查询中的空值。它不工作linq到sql检查null

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

回答

25

已映射你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

完美 - 正是我一直在寻找 – 2014-03-28 05:28:57

1

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

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

这个问题实际上不容易回答,因为你没有提供上下文,虽然通常_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比较总是会产生错误”。

0

我有这个疑问在这种情况下

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

希望它可以帮助工作。