2009-04-07 8 views
2

Dans mon modèle j'ai Address comme classe de base et MailingAddress, Email, et Phone comme sous-classes d'adresse. Un Person a une adresse requête afin d'obtenir une personne qui a une adresse postale Oakland ressemblerait à ceci:Requête Linq pour inclure un sous-type

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

Comment puis-je inclure également les adresses postales de la personne dans mon résultat de la requête? Je sais que je devrais utiliser une inclusion, mais je ne sais pas comment nommer le MailingAddress dans l'argument .Include.

Merci à l'avance

Répondre

2

Vous devrez créer un nouveau type qui a le type spécifique que vous recherchez, comme si:

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

Il suffit de sélectionner dans un type anonyme en utilisant le nom local de l'expression de la compréhension:

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

Je serais ravi de savoir pourquoi cela a été déclassé. – Richard

+0

Je pense qu'il demande la syntaxe pour remplir les objets Person retournés avec les Addresses de type MailingAddress. Cela dit, je ne sais pas comment faire cela du haut de ma tête :) –

+0

@Jonathan: si c'est correct, alors c'est une modification triviale de l'une ou l'autre réponse, mais besoin de clarification; car les deux réponses "incluent les adresses postales [...] dans le résultat de la requête" – Richard