1

使用 linq (EF dbcontext),我需要一个语句来过滤强类型的 IEnumerable 父实体集合中每个父实体的子实体集合。

示例:
我有 4 家酒店,每家酒店全年都有多个房间预订。然而,在 6 月份,一 (1) 家酒店没有任何预订 (reservation.Count=0),但其他三家酒店各有多个预订。

问题:
尝试#1:IEnumerable(hotel) HotelList = (from hotels in context.Hotels select hotels).ToList();

如果没有“where”子句(过滤器),我会得到 IEnumerable(hotel) HotelList 4 家酒店的集合和 IEnumerable(reservation) ReservationList 数据库中所有预订的集合(我只想要那些在六月的)!

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

如果我仅筛选 6 月的预订日期,我的酒店数量是 3 而不是 4。

问题:
我需要一个 linq 语句来选择“父”酒店集合并过滤“子”预订集合以仅包含 6 月份的预订(记住一家酒店在 6 月份没有预订)。

预期结果:
结果应该是父 IEnumerable(hotel) HotelList 集合(包括所有 4 个酒店实体)和子 IEnumerable(reservation) ReservationList 集合,其中列出了每个酒店实体 6 月的所有预订,但一 (1) 家酒店将有reservations.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 回答