2014-04-25 22 views
2

我知道我不能將null值爲null的int轉換爲非空值。在LinQ-to-entity的where子句中添加空值而不進行空值檢查

int? v = null; 
int w = (int)v; 

所以我開始通過使用空檢查我的where子句。但現在我發現它似乎仍然有效,即使沒有它,這怎麼可能?

我知道我有很多LogEmneId在數據庫中爲空。

foreach (var logMaaler in ctx.LogMaalers.Where(lm => 
       // (lm.LogEmneId != null && logEmner.Contains((short)lm.LogEmneId)) 
              logEmner.Contains((short)lm.LogEmneId) 
               )) 
{ 
} 

是否將LinQ-to-entity語句重寫爲處理空檢查的sql查詢?

回答

3

是否將LinQ-to-entity語句重寫爲處理空檢查的sql查詢?

的種類。 Contains在SQL查詢中轉換爲IN子句,該值與NULL值一起工作良好。考慮下面的查詢:

SELECT * 
FROM Table 
WHERE Id IN (1,2,3,4,5,6,7) 

,當你在Id列有NULL一排它會工作得很好。而這正是這裏發生的。

+0

謝謝,那麼我會跳過我自己的檢查,它是多餘的。 – radbyx