You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在EntityFramework Core中实现关联表查询并仅选取最新条目

如何在EntityFramework Core中实现关联表查询并仅选取最新条目

嘿,我来帮你搞定这个EF Core的查询问题!先看你原来的SQL逻辑:你是想从状态为1的公司列表里,每个公司只拿它最新修改的那条公司类型ID对吧?那在EF Core里其实可以很贴近原SQL的写法来实现,下面给你两种常用的方案:

方案一:利用导航属性(推荐)

如果你的Company实体已经配置了和CompanyType的一对多导航属性(比如叫CompanyTypes),可以直接用集合导航来写,代码更简洁:

from c in dbContext.Company
where c.Status == 1
select new 
{
    c.CompanyName,
    CompanyTypeID = c.CompanyTypes
        .OrderByDescending(ct => ct.Modified)
        .Select(ct => ct.CompanyTypeID)
        .FirstOrDefault()
}

这里的逻辑和你原SQL完全一致:对每个公司的所有类型记录按Modified倒序排,取第一条的ID;FirstOrDefault()还能处理某个公司没有对应类型的情况,此时会返回null,和原SQL的行为匹配。

方案二:显式子查询(和原SQL写法一致)

要是你没配置导航属性,或者更习惯贴近原SQL的写法,也可以用显式的子查询来实现:

from c in dbContext.Company
where c.Status == 1
select new 
{
    c.CompanyName,
    CompanyTypeID = (from ct in dbContext.CompanyType
                    where ct.CompanyID == c.CompanyID
                    orderby ct.Modified descending
                    select ct.CompanyTypeID)
                    .FirstOrDefault()
}

这个写法几乎就是把原SQL直接转成了LINQ查询语法,EF Core会自动把它翻译成等价的SQL语句,性能表现和原SQL差不多。

最后提个小优化建议:如果CompanyType表的Modified字段上建了索引,这个查询的效率会更高哦!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 12:44:30