使用LINQ

时间:2016-09-30 07:14:00

标签: c# .net entity-framework linq entity-framework-6

我有按此顺序嵌套的实体:

RootDomain
Company
CompaniesHouseRecord
CompanyOfficer

当给定RootDomain时,我想创建一个包含电子邮件地址的所有CompanyOfficers的列表,但我不知道如何执行此操作。

这是我的非工作尝试:

RootDomain rd = db.RootDomains.Find(123);
List<CompanyOfficer> col = rd.Companies.Where(x => x.CompaniesHouseRecords.Any(chr => chr.CompanyOfficers.Any(co => co.Email != null)))
                        .Select(x => x.CompaniesHouseRecords.Select(chr => chr.CompanyOfficers)).ToList();

我显然在这方面不合时宜。有人可以告诉我或指出正确的方法吗?

2 个答案:

答案 0 :(得分:4)

像这样:

RootDomain rd = db.RootDomains.Find(123);
List<CompanyOfficer> col = rd.Companies
  .SelectMany(c => c.CompaniesHouseRecords)
  .SelectMany(c => c.CompanyOfficers)
  .Where(o => null != o.Email).ToList();

答案 1 :(得分:1)

有人在我面前回答,但我可以展示一些不同的东西,这对于习惯于DB请求的人来说更方便。

使用LINQ,您可以执行以下类型的请求:

var officersWithEmail = from company in rd.Companies
                        from companiesHouseRecord in company.CompaniesHouseRecords
                        from companyOfficer in companiesHouseRecord.CompanyOfficers
                        where (companyOfficer.Email != null)
                        select companyOfficer;

有些人会发现它更具可读性。

如果您想获得一个List&lt;&gt;作为输出,只需在查询上使用.ToList。