我正在尝试在酒店预订项目上实施按日期过滤。
有人可以帮助我将此sql代码转换为linq 。
SELECT r.*
FROM Room r LEFT JOIN Reservation v ON r.RoomID = v.RoomID
AND NOT (@StartDate >= Date_Check_Out OR @EndDate <= Date_Check_In)
AND v.cancel = 0
WHERE v.ReservationID IS NULL
答案 0 :(得分:10)
将SQL转换为Linq的好工具之一:Linqer
尝试此查询
var q = (from r in Room
join v in Reservation on r.RoomID equals v.RoomID into outer
from o in outer.DefaultIfEmpty()
where !(o.Date_Check_Out<= startdate || o.Date_Check_In>=endDate)
&& v.cancel == 0 && v.ReservationID == null
select r);
同时检查:
参见SQL to LINQ Tool 现有的线程。
如果您决定手动执行,Linqpad应该有用。
您还希望看到:SQL to LINQ ( Visual Representation )通过图形表示得到一些好的...
答案 1 :(得分:2)
类似的东西:
DateTime startDate, EndDate;
var bookings = from r in Rooms
join v in Reservation
on r.RoomID equals v.RoomID into RoomReservation
from v in RoomReservation.DefaultIfEmpty()
where
(Date_Check_Out < startDate || Date_Check_In > endDate)
select r;
答案 2 :(得分:1)
也许是这样的:
DateTime StartDate=DateTime.Now;
DateTime EndDate=DateTime.Now;
var result= (
from r in Room
from v in Reservation
.Where(a=>
a.RoomID == r.RoomID
&&
!(
StartDate>=a.Date_Check_Out ||
EndDate <=a.Date_Check_In
)
&& a.cancel==false
).DefaultIfEmpty()
where v.ReservationID == null
select r
);