如何在LINQ中仅检索某些子对象?

时间:2010-02-22 11:42:32

标签: linq linq-to-entities

我有一个实体对象(公司),它有一个或多个子对象(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基本上只包含一个条目(最新的)一)。我无法为我的生活做出如何做到这一点。请帮忙!

提前致谢

1 个答案:

答案 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()
           }

给出相同的结果。

虽然这是一个猜测 - 我没有试过那个;但这是我先试试的方式。