我如何 select 列表中的所有对象在另一个 list/model 中没有相关对象

How do I select all objects from a list that have no related objects in another list/model

使用 linq,我如何select 房间对象列表中的所有房间对象 预订模型中不存在预订对象(可以通过外国检查键)?

这是对象列表:

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 的初学者,到目前为止我能理解的是如何从单个模型 select,尽管我可以使用带左连接的 SQL 查询轻松获得结果.

P.S:我首先创建了数据库,然后使用 ADO.NET 实体数据模型向导 代码优先生成了模型数据库。只要我理解原因,我也不介意对数据库或模型进行任何小的更改。

这应该有效:

var unbookedRooms = db.Rooms.Where(r =>  r.FK_HotelID == id && !r.Bookings.Any()).ToList();

想法是在子集合上使用 LINQ 的 Any() 方法来排除 Room 具有非空 Booking 集合的对象。

这样试试;

var rooms = (from m in db.Rooms
             where
             m.FK_HotelID == id &&
             !m.Bookings.Any()
             select m).ToList();