【发布时间】:2018-07-04 05:54:12
【问题描述】:
我想将此 SQL 代码转换为 LINQ。这是我的 SQL 代码:
SELECT Rooms.RoomName AS RoomNo, Beds.BedName AS Beds, Rooms.RoomType, ISNULL(CheckIn.CheckIntatus,'') AS Status
FROM CheckIn
INNER JOIN GuestBeds ON CheckIn.GuestBedId = GuestBeds.Id
AND (CheckIn.CheckInStatus = 1 OR CheckIn.CheckIntatus = 2 OR CheckIn.CheckSIntatus = 3)
RIGHT JOIN Beds ON GuestBeds.BedId = Beds.Id
INNER JOIN Rooms ON Beds.RoomId = Rooms.Id
LEFT JOIN Guests ON CheckIn.GuestId = Guests.Id
WHERE Beds.Active = 1 AND Rooms.Active = 1
ORDER BY RoomName, Beds
它运行良好,这意味着它显示了所有带有 CheckInStatus 的 RoomName。如果房间在 CheckIn 表中不存在,ot 将返回状态为 Null。 所以我想将代码转换为 LINQ。所以这是我的 LINQ 代码:
from b in Beds
join w in Rooms on b.RoomsId equals w.Id
where (a.CheckInStatus == 3 || a.CheckInStatus == 1 || a.CheckInStatus == 2)
join p in GuestBeds on b.Id equals p.BedId
join a in CheckIn on p.Id equals a.GuestBedId
join t in Guests on a.GuestId equals t.Id
where b.Active == true && w.Active == true
orderby w.RoomName
select new
{
RoomName = w.RoomName,
BedName = b.BedName,
Status = a.CheckInStatus
}
它不像第一个代码那样工作。它只显示包含 CheckInStatus 的数据。我希望它显示 Room 数据库中的所有 RoomName
【问题讨论】:
-
看起来您的 SQL 正在使用 LEFT 和 RIGHT 连接,但您的 LINQ 没有考虑到这一点。看看这是否有帮助:stackoverflow.com/questions/4497086/…
-
有什么原因你没有复制/粘贴你的 SQL 吗?它有错误...
标签: c# sql linq inner-join right-join