【问题标题】:Getting list of child entity nested several levels with LINQ使用 LINQ 获取嵌套多个级别的子实体列表
【发布时间】:2016-09-30 07:13:59
【问题描述】:

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

RootDomain
Company
CompaniesHouseRecord
CompanyOfficer

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

这是我的非工作尝试:

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();

我显然在这里偏离了目标。有人可以告诉我或指出正确的方法吗?

【问题讨论】:

  • 您可能想看看 Include()。见here。请记住,有两个不同的版本。旧的通过字符串引用子字段,而新的则使用 lambda 表达式。

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


【解决方案1】:

像这样:

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();

【讨论】:

    【解决方案2】:

    有人在我之前回答,但我可以展示一些不同的东西,这对于习惯于 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 作为输出,只需在查询中使用 .ToList 即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      相关资源
      最近更新 更多