我有一个简单的查询。
它检查房间列表 - 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
没有返回任何记录(即 Empty “Enumeration yielded no results”)——那么我在执行第二个查询时会出错 (var rooms = ...) :
转换为值类型“Int64”失败,因为具体化值为 null。结果类型的泛型参数或查询必须使用可空类型。
在第二个查询中是否有检查 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 中出现的错误是:
谢谢,
标记
最佳答案
难道你不能从 Except
中辞职并写下:
var rooms = dbt.Rooms.Where(r => r.h_id == AccID)
.Where(room => !room.Rentals.Any(rental =>
(dteFrom >= rental.check_in && dteFrom < rental.check_out))).
.GroupBy(p => p.RoomTypes).Select(g => new RatesViewModel
{
TypeName = g.Key.t_name,
TypeID = g.Key.t_id,
TypeCount = g.Count()
})
.ToList();
关于c# - Linq to Sql.Except 在 C# 中为 null 时不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16874535/