2016-09-30 1 views
2

Ich habe Entitäten, die in dieser Reihenfolge verschachtelt sind:Erste Liste der untergeordneten Einheit verschachtelt mehrere Ebenen mit LINQ

RootDomain 
Company 
CompaniesHouseRecord 
CompanyOfficer 

Wenn ein RootDomain I eine Liste aller CompanyOfficers erstellen möchten, die eine E-Mail-Adresse haben, aber ich Ich bin mir nicht sicher, wie ich das machen soll.

Hier ist mein Nicht-Arbeitsversuch:

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

Ich bin natürlich weg hier die Marke. Kann mir jemand zeigen oder mir auf die richtige Methode für Dong zeigen?

+0

Vielleicht möchten Sie sich * Include() * ansehen. Siehe [hier] (http://stackoverflow.com/a/5718935/1525840). Beachten Sie, dass es ** zwei ** verschiedene Versionen gibt. Der alte, wenn Sie auf das Unterfeld verweisen, und der neue, in dem Sie den Lambda-Ausdruck verwenden. –

Antwort

4

So:

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

Jemand antwortete vor mir, aber ich kann etwas anderes zeigen, was für jemanden bequemer sein kann, die DB-Anfragen verwendet wird.

LINQ verwenden, können Sie diese Art von Anfrage tun:

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

Einige Leute werden es besser lesbar finden.

Wenn Sie eine Liste <> als Ausgabe erhalten möchten, verwenden Sie einfach .ToList für die Abfrage.

Verwandte Themen