【问题标题】:Need help converting SQL into LINQ需要帮助将 SQL 转换为 LINQ
【发布时间】:2018-11-24 08:45:48
【问题描述】:
SELECT ra.ResidentID, ra.RoomID, r.Number, ra.StartDate, p.FacilityID
FROM( 
    SELECT ResidentID, MAX(StartDate) AS max_start
    FROM RoomAssignments
    GROUP BY ResidentID
    ) m

    INNER JOIN RoomAssignments ra
        ON ra.ResidentID = m.ResidentID
        AND ra.StartDate = m.max_start

    INNER JOIN Rooms r
        ON r.ID = ra.RoomID

    INNER JOIN Person p 
        ON p.ID = ra.ResidentID

    inner join ComplianceStage cs 
        ON cs.Id = p.ComplianceStageID

ORDER BY ra.EndDate DESC

我试图弄清楚如何使用 LINQ 将其转换为 C#。我是 C# 和 LINQ 的新手,无法让我的子查询正确触发。你们哪位巫师有机会帮我打开灯吗?

更新-----------------

我想我已经掌握了它的要点,但是在查询最大开始日期时遇到了问题:

var maxQuery =
        from mra in RoomAssignments
        group mra by mra.ResidentID
        select new { mra.ResidentID, mra.StartDate.Max() };

from ra in RoomAssignments
join r in Rooms on ra.RoomID equals r.ID
join p in Persons on ra.ResidentID equals p.ID
where ra.ResidentID == maxQuery.ResidentID
where ra.StartDate == maxQuery.StartDate

orderby ra.ResidentID, ra.StartDate descending
select new {ra.ResidentID, ra.RoomID, r.Number, ra.StartDate, p.FacilityID}

【问题讨论】:

标签: linq sql-to-linq-conversion


【解决方案1】:

按照我的LINQ to SQL Recipe,如果您只按照 SQL 进行转换,则非常简单。唯一棘手的部分是join将最大开始日期子查询中的范围变量转换为RoomAssignments中与字段名称匹配的新匿名对象。

var maxQuery = from mra in RoomAssignments
               group mra by mra.ResidentID into mrag
               select new { ResidentID = mrag.Key, MaxStart = mrag.Max(mra => mra.StartDate) };

var ans = from m in maxQuery
          join ra in RoomAssignments on m equals new { ra.ResidentID, MaxStart = ra.StartDate }
          join r in Rooms on ra.RoomID equals r.ID
          join p in Persons on ra.ResidentID equals p.ID
          join cs in ComplianceStage on p.ComplianceStageID equals cs.Id
          orderby ra.EndDate descending
          select new {
            ra.ResidentID,
            ra.RoomID,
            r.Number,
            ra.StartDate,
            p.FacilityID
          };

【讨论】:

    猜你喜欢
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多