使用linq(EF dbcontext),我需要一个语句来过滤强类型的IEnumerable父实体集合中每个父实体的子实体集合。
例:
我有4家酒店,每家酒店全年都有几个房间预订。
但是在6月份,一(1)家酒店没有任何预订(reservation.Count = 0),但其他三家酒店各有几个预订。
问题:
尝试#1:IEnumerable(hotel) HotelList = (from hotels in context.Hotels select hotels).ToList();
没有'where'子句(过滤器)我得到IEnumerable(酒店)4个酒店和IEnumerable(预订)的ListList集合数据库中所有预订的ReservationList集合(我只想要那些6月份)!
尝试#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(酒店)HotelList集合(包括所有4家酒店实体)和子IEnumerable(预订)ReservationList集合,列出每个酒店实体6月份的所有预订,但一(1)家酒店将有预订.Count = 0(即没有预留实体)。
谢谢 - jd
答案 0 :(得分: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() }
答案 1 :(得分:1)