如何在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
相关产品推荐
相关产品推荐

