2009-04-07 3 views
2

In meinem Modell habe ich Address als Basisklasse und MailingAddress, Email und Phone als Unterklassen der Adresse. Ein Person hat eine Adresse, so abfragen, um eine Person zu erhalten, die eine Oakland Postanschrift hat würde wie folgt aussehen:Linq Abfrage, um einen Subtyp

var peopleInOakland = from p in entities.DbObjectSet.OfType<Person>() 
          from a in p.Addresses.OfType<MailingAddress>() 
          where a.City == "Oakland" 
          select p; 

Wie kann ich auch die Postanschrift der Person in meinem Suchergebnis? Ich weiß, dass ich ein Einschließen verwenden sollte, aber ich bin unsicher, wie man das MailingAddress im Argument .Include nennt.

Vielen Dank im Voraus

Antwort

2

Sie eine neue Art zu schaffen, die die spezifische Art hat, die Sie suchen, wie folgt:

var peopleInOakland = 
    from p in entities.DbObjectSet.OfType<Person>() 
    from a in p.Addresses.OfType<MailingAddress>() 
    where a.City == "Oakland" 
    select 
     new { Person = p, Addresses = p.Addresses.OfType<MailingAddress>() }; 
0

Wählen Sie einfach in eine anonyme Art der lokale Name des Ausdrucksverständnis mit:

... 
select new { 
    Persion = p, 
    Address = a 
}; 
+0

Wäre nett zu wissen, warum dies abgelehnt wird. – Richard

+0

Ich glaube, er fragt nach der Syntax, um die Person-Objekte zu füllen, die mit den Adressen vom Typ MailingAddress zurückgegeben werden. Das gesagt, ich weiß nicht, wie man das von meinem Kopf aus tut :) –

+0

@ Jonathan: wenn richtig, dann ist das eine triviale Änderung von jeder Antwort, aber brauchen Klärung; da beide Antworten "die Mailing-Adressen [...] im Abfrageergebnis enthalten" – Richard