2013-07-13 73 views
1

我有RoomBed EF類其中每個Room有一些Bed s.when我使用LINQ聲明:「對象引用不設置到對象的實例」,甚至當我檢查空

IEnumerable<Room> room=... 
if (room == null || !room.Any()) 
    return null; 
return room.SelectMany(r=>r.Beds); 

給我這個錯誤:

Object reference not set to an instance of an object.

in return line。

+6

因此,也許至少有一間帶'牀== null' –

+2

思考是不夠的,你應該知道。或者找出答案。 –

+0

@HenkHolterman我只有一個房間,裏面有兩個「牀」 –

回答

13

您在enumerable中的一個房間爲null。這樣做:

return room.Where(r => r != null) 
      .SelectMany(r => r.Beds); 
+0

Doh!我相信這是正確的。我沒有看到明顯的。 –

0

你可以嘗試使用次數太多,這樣的:當一個房間有Beds == null纔會發生

IEnumerable<Room> room=... 
if (room == null) // Check for nulls 
     return null; 
else if (room.count() == 0)  // Check if empty 
     return null; 
else if(!room.Any(x => x.Beds == null)  // Check if there is no null Beds 
     return room.SelectMany(r=>r.Beds); 
+0

很多檢查,但可能是真正的原因? –

+0

計數()== 0將取代!room.Any()我相信。 –

+0

'if(!room.Any(x => x.Beds == null)'line –

1

錯誤。

幽州:「我只有一​​個房間有兩張牀在它」但問題還提到EF。

所以問題是在IEnumerable<Room> room=......

當你的EF查詢使用lazy loading牀財產將是無效的,即使有記錄。

對於你必須發表關於EF部分的所有細節的完整解決方案:代碼| DB第一,查詢,哪種類型的上下文類,EF版本等

隨着EF這種最新版本的問題很少見,我的猜測是你在查詢中有一個不應該的ToList()

+0

'if'(!room.Any(x => x.Beds == null))''給我同樣的錯誤? –

+3

我真的不知道。無法從您發佈的內容中分辨出來。 –

2

我發現我的RoomCollection小號不null,也沒有任何RoomBedsnull。問題是我的至少一個項目是RoomCollectionnull。所以要根據YK1的答案,我應該使用:

return room.Where(r => r != null).SelectMany(r => r.Beds); 
相關問題