我有以下SQL查询:
SELECT
table1.Id AS EinAusgangId,
table1.Ausgabedatum,
table1.Rueckgabedatum,
table1.WerkzeugId,
cpmWerkzeug.Name
FROM cpmEinAusgang AS table1
INNER JOIN cpmWerkzeug ON table1.WerkzeugId = cpmWerkzeug.Id
WHERE table1.Id = (SELECT MAX(Id) AS Expr1
FROM dbo.cpmEinAusgang
WHERE table1.WerkzeugId = WerkzeugId)
我的目标是将整个查询转换为LINQ语句,以便在.Net应用程序中进一步使用。我已经将连接表转换为LINQ,但也可以在select
子句中使用where
吗?
这是我到目前为止所得到的,它给出了与上面的SQL语句几乎相同的结果,但是当表cpmEinAusgang
包含一个cpmWerkzeug
的多个记录时出现重大错误
using (var dbContext = new cpmEntities())
{
var werkzeuge = from w in dbContext.cpmWerkzeug
join e in dbContext.cpmEinAusgang
on w.Id equals e.WerkzeugId
where e.Rueckgabedatum == null
orderby w.Name
select w;
return werkzeuge.ToList();
}
有谁知道如何在linq中实现上述sql? 谢谢你的帮助。 :)
编辑:已解决(见下文)
答案 0 :(得分:2)
var werkzeugeImUmlauf = from w in dbContext.cpmWerkzeug
join e in dbContext.cpmEinAusgang
on w.Id equals e.WerkzeugId
where e.Id == dbContext.cpmEinAusgang.Where(x => x.WerkzeugId == e.WerkzeugId).Max(x => x.Id) select w;
这是最终的解决方案。正如Mittal在他的回答中所提到的,可以在LINQ中编写子查询。
答案 1 :(得分:1)
是的,您也可以在LINQ中编写Sub Query
。
var werkzeuge = from w in dbContext.cpmWerkzeug
join e in dbContext.cpmEinAusgang
on w.Id equals e.WerkzeugId
where w.id = (dbContext.cpmEinAusgang.Max(x => x.id)) AND w.WerkzeugId = WerkzeugId