2011-03-07 51 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(); 

希望它可以幫助工作。