1

linq (EF dbcontext) を使用して、厳密に型指定された IEnumerable 親エンティティ コレクション内の各親エンティティの子エンティティ コレクションをフィルター処理するステートメントが必要です。

例:
私は 4 つのホテルを所有しており、各ホテルには年間を通して複数の部屋の予約があります。ただし、6 月には、1 つのホテルには予約がありませんが (reservation.Count=0)、他の 3 つのホテルにはそれぞれ複数の予約があります。

問題:
試行 #1:IEnumerable(hotel) HotelList = (from hotels in context.Hotels select hotels).ToList();

'where' 句 (フィルター) を使用しないと、4 つのホテルの IEnumerable(hotel) HotelList コレクションと、データベース内のすべての予約の IEnumerable(reservation) ReservationList コレクションが取得されます (6 月の予約のみが必要です)。

試み #2:IEnumerable(reservation) ReservationList = (from reservations in context.Reservations where reservations.reservation_date_month == 'June' select reservations).ToList();

6 月のみの予約日をフィルターすると、ホテルの数は 4 ではなく 3 になります。

質問:
「親」のホテル コレクションを選択し、「子」の予約コレクションをフィルタリングして 6 月の予約のみを含める linq ステートメントが必要です (1 つのホテルには 6 月の予約がないことを思い出してください)。

期待される結果:
結果は、親の IEnumerable(hotel) HotelList コレクション (4 つのホテル エンティティすべてを含む) および子の IEnumerable(reservation) ReservationList コレクションである必要があります。 reserved.Count = 0 (つまり、予約エンティティなし)。

ありがとう - jd

4

2 に答える 2

2

joinを自分で指定する必要があります。

from h in context.Hotels
join r in context_Reservations on r.hotel_id equals h.id
where reservations.reservation_date_month == 'June'
group new { h, r } by h into g
select new { Hotel g.Key, Reservations = g.Select(i => i.r).ToList() }
于 2013-03-15T06:53:38.617 に答える
1

各予約が所属するホテルを参照する構造になっているのではないかと思います。次に、必要なのは、ホテルをその予約にリンクする外部結合です。内部結合の代わりに外部結合を使用すると、一致する予約がないホテルも出力に含まれるようになります。詳細については、ここここ、およびここを参照してください。

于 2013-03-15T06:51:35.183 に答える