我有一个实体对象(公司),它有一个或多个子对象(CompanyRevision),表示为数据库中的非空FK关系。 使用LINQ,我想从数据库中获取所有公司,但我也只想为每个公司提供最新的CompanyRevision。 这就是我今天的做法,但我有一种感觉,可以使用一个查询来完成。
IEnumerable<Company> companyList = from p in ctx.Company.Include("CompanyRevisions")
select p;
foreach(Company c in companyList)
{
CompanyRevision cr = (from p in c.CompanyRevisions
orderby p.Timestamp descending
select p).First();
// Do something with c and cr...
}
正如您所看到的,我想将第二个LINQ查询(获取最新的CompanyRevision的查询)添加到第一个查询中,因此companyList [i] .CompanyRevisions基本上只包含一个条目(最新的)一)。我无法为我的生活做出如何做到这一点。请帮忙!
提前致谢
答案 0 :(得分:2)
怎么样:混合linq语言和扩展方法:
var results = from p in ctx.Company.Include("CompanyRevisions")
select new {Company = p,
Revision = p.CompanyRevisions.OrderByDescending(cr => cr.Timestamp).First()
}
每个结果现在都有公司和修订版成员。
你可能也可以这样做 -
var results = from p in ctx.Company.Include("CompanyRevisions")
select new {Company = p,
Revision = (from pcr in p.CompanyRevisions
orderby pcr.Timestamp descending
select pcr).First()
}
给出相同的结果。
虽然这是一个猜测 - 我没有试过那个;但这是我先试试的方式。