2015-03-24 7 views
7

Jak mam napisać instrukcję LINQ, która wybiera obiekty nadrzędne, które mają pasujący obiekt podrzędny w kolekcji? Oto przykładowe zajęcia.Linq do zaznaczania obiektów nadrzędnych, w których obiekty podrzędne mają pasujący obiekt potomny

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

class Child { 
    int ID { get; set; } 
    string Name { get; set; } 
    string Nickname { get; set; } 
} 

W powyższym przykładzie chciałbym zwrócić wszystkich rodziców, którzy zawierają dziecko z określonym pseudonimem.

+2

Głosowanie w dół było dość trudne. Szukałem SO * i * Google zarówno przed napisaniem tej abstrakcyjnej odpowiedzi. Gdyby tu narzędzia były lepsze, może nie miałbym duplikatu pytania. –

+2

Rewizja. Był to najlepszy wynik wyszukiwania "wybierz obiekty nadrzędne na podstawie obiektów podrzędnych". Gdybym miał przedstawiciela, odznaczałbym to jako duplikat; powiązane pytanie dostarcza podobnej odpowiedzi, ale sposób w jaki tytuł jest sformułowany nie jest intuicyjnie podobny. – Will

+1

Dzięki za to. –

Odpowiedz

18

To straightfoward LINQ-obiekty:

listOfParents.Where(p => p.Children.Contains(childObjectToMatch)) 

Dla Linq-Podmiotów, jeśli obiekt dziecko nie jest śledzony jako podmiot może trzeba dopasować na boisku dziecko identyfikatora obiektu:

int childObjectIdToMatch = childObjectToMatch.ID; 
dbContext.Parents.Where(p => p.Children.Any(c => c.ID == childObjectIdToMatch)); 
+1

Dziękujemy za poświęcenie czasu na udzielenie odpowiedzi. Byłeś bardzo pomocny. –

+0

Dzięki za przypomnienie mi o Any() podczas sprawdzania właściwości dziecka. – gregsonian

Powiązane problemy