C# 如何将嵌套sql语句转换为linq到实体?

C# 如何将嵌套sql语句转换为linq到实体?,c#,linq,entity-framework,nested,C#,Linq,Entity Framework,Nested,我试图创建一个基本的room availability语句,用于linq to entity框架。我有两张桌子:“Room”包括RoomID/RoomSize列和“Booking”包括BookingID/RoomID/StartDate/Enddate列 我有一个工作sql语句: SELECT RoomID, RoomSize from Room where RoomID NOT IN (SELECT RoomID from booking where ('08/01/

我试图创建一个基本的room availability语句,用于linq to entity框架。我有两张桌子:“Room”包括RoomID/RoomSize列和“Booking”包括BookingID/RoomID/StartDate/Enddate列

我有一个工作sql语句:

SELECT RoomID, RoomSize from Room
where RoomID NOT IN (SELECT RoomID from booking
             where ('08/01/2015' >= [start] AND '08/01/2015' <= [end]) OR ('08/20/2015' >= [start] AND '08/20/2015' <= [end]))
var rooms = (from r in db.Rooms  
             where !(((from b in db.Bookings
                       where (startDate >= b.StartDate && endDate <= b.EndDate) || (endDate >= b.StartDate && endDate <= b.EndDate)).Contains(r.RoomID))     
                       select new AvailableRoom
                       {
                           ID = r.RoomID,
                           Size = r.RoomSize
                       });
我在linq to实体声明中已经做到了这一点:

SELECT RoomID, RoomSize from Room
where RoomID NOT IN (SELECT RoomID from booking
             where ('08/01/2015' >= [start] AND '08/01/2015' <= [end]) OR ('08/20/2015' >= [start] AND '08/20/2015' <= [end]))
var rooms = (from r in db.Rooms  
             where !(((from b in db.Bookings
                       where (startDate >= b.StartDate && endDate <= b.EndDate) || (endDate >= b.StartDate && endDate <= b.EndDate)).Contains(r.RoomID))     
                       select new AvailableRoom
                       {
                           ID = r.RoomID,
                           Size = r.RoomSize
                       });
我在之前的最后一个括号中得到一个错误。Containsr.RoomID说我应该有一个select语句,但我似乎无法让它工作

欢迎提出任何建议

如果您认为使用lambdas会更好/更容易,请随时提出建议并举例说明。我只是自己对他们不太熟悉。。然而

谢谢。

您可以使用LINQ!。。。对于不在中的SQL,请执行以下操作:

var rooms = (from r in db.Rooms  
             where !db.Bookings
                      .Where(b => (startDate >= b.StartDate && endDate <= b.EndDate) 
                                    || 
                                  (endDate >= b.StartDate && endDate <= b.EndDate)
                            )
                      .Any(b => b.RoomID == r.RoomID)
             select new AvailableRoom
             {
               ID = r.RoomID,
               Size = r.RoomSize
             });