我有一个简单的查询。
它检查房间列表 -prebookedRooms
然后它检查另一个房间列表,但使用运算符从后续列表.Except
中删除任何房间:prebookedRooms
// Get list of rooms already booked
var prebookedRooms = dbt.Rooms
.Where(room => room.Rentals.Any(rental =>
(dteFrom >= rental.check_in && dteFrom < rental.check_out)));
// Get list of rooms
var rooms = dbt.Rooms.Where(r => r.h_id == AccID)
.Except(prebookedRooms)
.GroupBy(p => p.RoomTypes).Select(g => new RatesViewModel
{
TypeName = g.Key.t_name,
TypeID = g.Key.t_id,
TypeCount = g.Count()
})
.ToList();
这很好用 -rooms
返回房间列表,prebookedRooms
排除。
但是,如果prebookedRooms
不返回任何记录(即,空的“枚举未产生结果”) - 然后在执行第二个查询时出现错误(var rooms = ...):
The cast to value type 'Int64' failed because the materialized value is null. Either the result type's generic parameter or the query must use a nullable type.
在第二个查询中是否有检查 prebookedRooms 是否为空,所以我可以避免这个错误?
prebookedRooms 模型:
public class Room
{
[Key]
public long room_id { get; set; }
public long hotel_id { get; set; }
public long type_id { get; set; }
}
VS中出现的错误是:
谢谢,
标记