我正在编写一个linq,左外连接条件在右侧表格中。 我的代码
var leftHotelRooms = db.HotelRooms.Include(hr=>hr.HotelRoomBlackoutPeriods)
.Where(room => hotelCodes.Contains(room.UserHotelId) &&
room.Scope == scope &&
room.IsDeleted == false &&
room.IsEnabled == true &&
room.MaxCapacity >= minimumNumberOfGuests)
.GroupJoin(db.HotelRoomBlackoutPeriods,
room => room.Id,
blackoutPeriod => blackoutPeriod.HotelRoomId,
(room, blackoutPeriod) => new
{
room,
blackoutPeriods = blackoutPeriod.DefaultIfEmpty()
})
.Select(a => new {a.room,a.blackoutPeriods})
.Where(
x => x.blackoutPeriods.Any(y => DbFunctions.DiffDays(y.StartDate, checkIn) != 0
&& (DbFunctions.DiffDays(y.StartDate, checkIn) < 0) ? (DbFunctions.DiffDays(y.StartDate, checkOut) >= 0 ? false : true) : true &&
(DbFunctions.DiffDays(y.StartDate, checkIn) > 0) ? (DbFunctions.DiffDays(y.EndDate, checkIn) <= 0 ? false : true) : true
))
.ToList();
}
效果非常好,但不急于加载,当我将上述查询的结果转换为我的商业模式时,它再次触发db.HotelRoomBlackoutPeriods
上的一些查询
请提供实现此目的的最佳方式
提前致谢。
抱歉(如果我要问一些废话)提前
答案 0 :(得分:1)
更改结果集的形状时,急切加载不起作用。结果集的形状为HotelRoom
类型。使用任何手动连接或投影后,您将更改结果集并忽略预先加载请求。