2016-09-30 7 views
2

でいくつかのレベルを入れ子になった:私は、電子メールアドレスを持つすべてのCompanyOfficersのリストを作成したいが、私RootDomainを与えられたとき子エンティティのリストを取得することは、私がこの順にネストされているエンティティ持ってLINQ

RootDomain 
Company 
CompaniesHouseRecord 
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(); 

:ここ

は私の非稼働の試みです。誰かが私を見せてもらえますか、これを正しい方法で教えてもらえますか?このよう

+0

* Include()*を見てみるとよいでしょう。 [here](http://stackoverflow.com/a/5718935/1525840)を参照してください。 ** 2つの異なるバージョンがあることに注意してください。古いものは、文字列でサブフィールドを参照し、新しいものはラムダ式を使用します。 –

答えて

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

誰かが私の前に答えたが、私は、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; 

一部の人々は、それがより読みやすいでしょう。

出力としてリスト<を取得する場合は、クエリで.ToListを使用します。

関連する問題