2013-04-30 20 views
6

Biorąc pod uwagę listę obiektów nadrzędnych, z których każdy ma listę obiektów podrzędnych, chcę znaleźć obiekt podrzędny zgodny z określonym identyfikatorem.Znajdź obiekty potomne na liście obiektów nadrzędnych za pomocą LINQ

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

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

Teraz chcę przedmiotem Dziecko posiadające specyficzny ID:

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

W jaki sposób można to zrobić przy użyciu LINQ?

Odpowiedz

17

Myślę, że chcesz:

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

Zauważ, że ten zakłada, że ​​nieruchomość Rodzica Dzieci nie będzie null odniesienia lub zawierać pustych odniesień dziecka.

+0

+1, Ani :) Jest to przydatne! – zey

+0

@Ani dla zerowych referencji można dodać dwa dodatkowe warunki Gdzie. –

+0

@AkashKava: Jasne, ale nie ma potrzeby dodawania ich, chyba że zostały one zatwierdzone przez projekt. – Ani

6

Można użyć SelectMany:

Child childWithId17 = parents.SelectMany(p => p.Children) 
          .Where(ch=>ch.ID==17) 
          .FirstOrDefault(); 
Powiązane problemy