使用 LinqToSql,我需要为连接表 (CL) 中的最新 modDate 返回单个 (L)。
表格:
L(盖子,meta1,meta2,...)
CL(Cid、盖子、ModDate)
这是产生预期结果的sql
SELECT l.*
FROM L l
INNER JOIN (
SELECT TOP 1 cl.Lid, MAX(cl.ModDate) as ModDate
FROM CL cl
INNER JOIN L l ON cl.Lid = l.Lid AND l.meta1 = 5
GROUP BY cl.Lid
ORDER BY MAX(cl.ModDate) DESC
) As m ON l.Lid = m.Lid
最佳答案
足够简单。子查询将我们转换到 id。查询获取那些具有匹配 ID 的记录。
var subquery = db.L
.Where(L => L.meta1 = 5)
.SelectMany(L => L.CLs)
.GroupBy(CL => CL.Lid)
.OrderByDescending(g => g.Max(CL => CL.ModDate))
.Select(g => g.Key)
.Take(1)
var query = db.L
.Where(L => subquery.Any(id => L.Lid == id))
进一步思考这一点,您可以摆脱子查询:
var query = db.L
.Where(L => L.meta1 = 5)
.SelectMany(L => L.CLs)
.GroupBy(CL => CL.Lid)
.OrderByDescending(g => g.Max(CL => CL.ModDate))
.Select(g => g.First().L);
关于linq - 如何在单个 linq To Sql 语句中使用子查询、分组依据、最大值和顶部?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/502415/