2016-04-27 118 views
-1

我是EF新手,試圖用它做一個小項目。我向EF添加了一個條件,但是我遇到了問題。 我的條件是所有關於像SQL條件, SELECT * FROM table1 WHERE col1 IN (1,2,3...)如何檢查對象在EF中是否爲空

這裏是我的EF ....

var res3 = res2.Where(l => !slitDetail 
         .Any(s => s.BlockId == l.Id 
           && s.WarehouseDepot.WarehouseDepotName != "Ara Ürün Depo" 
           && s.WarehouseDepot.WarehouseDepotName != "Özel Kesim Depo")); 

s.WarehouseDepot可能是NULL有時這是正常的,但如果是零,這個查詢拋出一個例外。

如何檢查s.WarehouseDepot是否爲空,即使它爲空也能使其工作?

+0

你可以申請這個:「var res3 = res2.Where(l =>!slitDetail.Any(s => s.BlockId == l.Id && s.WarehouseDepot!= null &&(s.WarehouseDepot.WarehouseDepotName! =「AraÜrünDepo」&& s.WarehouseDepot.WarehouseDepotName!=「ÖzelKesim Depo」)));「 –

+1

你確定這是EF查詢嗎?即'res2'和'slitDetail'是'IQueryable's? NRE指示LINQ到對象查詢。在那裏你可以檢查'null',就像你在其他C#代碼中檢查'null'一樣。其實你也可以在EF查詢中做到這一點。 –

+1

如何在你的'Any'子句中添加'&& s.WarehouseDepot!= null'? – bit

回答

1

有2個possiblities如果s.WarehouseDepot == null

1)您希望您的Any回到true,在這種情況下,你可以使用類似

var res3 = res2.Where(l => !slitDetail 
         .Any(s => s.BlockId == l.Id 
           && s.WarehouseDepot != null 
           ? (s.WarehouseDepot.WarehouseDepotName != "Ara Ürün Depo" && s.WarehouseDepot.WarehouseDepotName != "Özel Kesim Depo") 
           : true)); 

這將使用s.WarehouseDepot只有當它有一個值否則會返回true

2)您想讓您的Any返回false。在這種情況下,你可以通過false上述表達式只需更換true或使用類似

var res3 = res2.Where(l => !slitDetail 
         .Any(s => s.BlockId == l.Id 
           && s.WarehouseDepot != null 
           && s.WarehouseDepot.WarehouseDepotName != "Ara Ürün Depo" 
           && s.WarehouseDepot.WarehouseDepotName != "Özel Kesim Depo")); 

注意,這兩種結果會自動考慮s.BlockId == l.Id條件了。