如何将嵌套的 sql 语句转换为 linq to entities?
How to convert nested sql statement to linq to entities?
我正在尝试创建一个基本的房间可用性声明以与 linq to entity framework 一起使用。我有两个表:'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]))
我已经了解了 linq to entity 语句:
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
});
我在 .Contains(r.RoomID) 之前的最后一个括号处收到一个错误,说我应该有一个 select 语句,但我似乎无法让它工作。
欢迎提出任何建议。
如果您认为使用 lambda 表达式 better/easier 请随时提出建议和示例。我自己对他们还不太熟悉..
谢谢。
您可以对 SQL NOT IN()
使用 LINQ !...Any()
,像这样:
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
});
我正在尝试创建一个基本的房间可用性声明以与 linq to entity framework 一起使用。我有两个表:'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]))
我已经了解了 linq to entity 语句:
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
});
我在 .Contains(r.RoomID) 之前的最后一个括号处收到一个错误,说我应该有一个 select 语句,但我似乎无法让它工作。
欢迎提出任何建议。
如果您认为使用 lambda 表达式 better/easier 请随时提出建议和示例。我自己对他们还不太熟悉..
谢谢。
您可以对 SQL NOT IN()
使用 LINQ !...Any()
,像这样:
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
});