使用linq,我如何从预订模型中没有预订对象的房间对象列表中选择所有房间对象(可以通过外键检查)?
这是对象列表:
var rooms = (from m in db.Rooms
where
m.FK_HotelID == id
select m).ToList();
这是名为Room的第一个模型:
public partial class Room
{
public Room()
{
Bookings = new HashSet<Booking>();
}
public int RoomID { get; set; }
public int RoomNumber { get; set; }
public string RoomType { get; set; }
// Foreign Key
public int? FK_HotelID { get; set; }
public virtual ICollection<Booking> Bookings { get; set; }
// Navigation Property
public virtual Hotel Hotel { get; set; }
}
另一个名为Booking的模型:
public partial class Booking
{
public int BookingID { get; set; }
public string BookingName { get; set; }
public string BookingContact { get; set; }
public DateTime BookingTime { get; set; }
public string BookingStatus { get; set; }
// Foreign Key
public int? FK_RoomID { get; set; }
// Navigation Property
public virtual Room Room { get; set; }
}
我是linq的初学者,到目前为止我所能理解的是如何从单个模型中进行选择,尽管我可以使用带有左连接的SQL查询轻松获得结果。
P.S:我首先创建数据库并使用 ADO.NET实体数据模型向导和数据库中的代码优先生成模型。我也不介意对数据库或模型进行任何小的更改,只要我理解为什么。
答案 0 :(得分:2)
这应该有效:
var unbookedRooms = db.Rooms.Where(r => r.FK_HotelID == id && !r.Bookings.Any()).ToList();
我们的想法是在子集合上使用LINQ的Any()
方法来排除具有非空Room
集合的Booking
个对象。
答案 1 :(得分:1)
试试这个;
var rooms = (from m in db.Rooms
where
m.FK_HotelID == id &&
!m.Bookings.Any()
select m).ToList();