我有按此顺序嵌套的实体:
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();
我显然在这方面不合时宜。有人可以告诉我或指出正确的方法吗?
答案 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。