2013-04-30 14 views
6

Dato un elenco di oggetti padre che hanno ciascuno un elenco di oggetti figlio, voglio trovare l'oggetto figlio che corrisponde a un ID specifico.Trova oggetti secondari nell'elenco di oggetti padre utilizzando LINQ

public class Parent 
{ 
    public int ID { get; set; } 
    public List<Child> Children { get; set; } 
} 

public class Child 
{ 
    public int ID { get; set; } 
} 

Ora voglio l'oggetto Bambino che ha un ID specifico:

List<Parent> parents = GetParents(); 
Child childWithId17 = ??? 

Come posso fare questo usando Linq?

risposta

17

Penso che si desidera:

Child childWithId17 = parents.SelectMany(parent => parent.Children) 
          .FirstOrDefault(child => child.ID == 17); 

Si noti che questo presuppone che la proprietà dei bambini del genitore non sarà un nullo di riferimento o contenere riferimenti Child nulli.

+0

+1, Ani :) è utile! – zey

+0

@Ani per riferimenti null è possibile aggiungere due condizioni extra Where. –

+0

@AkashKava: certo, ma non è necessario aggiungerli a meno che non siano consentiti valori nulli dal design. – Ani

6

È possibile utilizzare SelectMany:

Child childWithId17 = parents.SelectMany(p => p.Children) 
          .Where(ch=>ch.ID==17) 
          .FirstOrDefault(); 
Problemi correlati