[C#]Linq 查询子查询和马克斯

标签: Linq C#
发布时间: 2017/2/27 3:45:17
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

如何重此 SQL 写到 Linq 查询?

纯 SQL

SELECT *
FROM contracts
    INNER JOIN
        (SELECT contractid, max(date) date 
        FROM contractlogs GROUP BY contractId) b 
    ON contracts.id = b.contractId

在 Linq 的尝试

from c in _db.Contracts
join sub in (from cl in _db.ContractLogs
             group cl by cl.contractId into g
             select new { contractId = g.contractId, changedate = g.Max(x => x.date)})
    on c.id equals sub.contractId 
select new { c, cl }

查询的目标是选择所有合同都带他们最新的更新 (第一) (在 contractLogs)。我目前很为难选择将如何工作。理想的情况我试图返回 c 与 cl 的对象。

解决方法 1:

您可以通过排序降序排序,并第一个在他们最新的日志︰

from c in _db.Contracts
let mostRecentContractLog = c.ContractLogs
                             .OrderByDescending(cl => cl.date)
                             .FirstOrDefault()
select new { c, mostRecentContractLog }

正如你所看到的我假设您有一个导航属性 Contract.ContractLogs 。它总是强烈建议使用导航中的属性而不是手动编码的联接。

赞助商