3

この LINQ ステートメントを使用すると、それぞれいくつかのs.when を持つEF クラスがありますRoomBedRoomBed

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

このエラーを教えてください:

オブジェクト参照がオブジェクト インスタンスに設定されていません。

並んでreturnいます。

4

4 に答える 4

17

列挙可能な部屋の 1 つが null です。これを行う:

return room.Where(r => r != null)
           .SelectMany(r => r.Beds);
于 2013-07-13T19:45:03.603 に答える
1

このエラーは、ルームに がある場合にのみ発生する可能性がありBeds == nullます。

あなたは次のように述べています:「ベッドが2つある部屋は1つしかありません」が、質問にはEFも記載されています。

したがって、問題は in にあり...ますIEnumerable<Room> room=...

EF クエリが遅延読み込みを使用する場合、レコードがあっても Beds プロパティは null になります。

完全な解決策を得るには、EF 部分に関するすべての詳細を投稿する必要があります: Code|DB を最初に、クエリ、Context クラス、EF バージョンなどを入力します。

EF の最新バージョンでは、この種の問題はめったにありません。私の推測ではToList()、クエリにあるべきではない場所に a があると思います。

于 2013-07-13T19:31:03.287 に答える
0

次のように、 count も使用できます。

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);
于 2013-07-13T19:18:09.530 に答える