2009-02-06 11 views
9

Mam kolekcję obiektów o nazwie Gigs.Wywoływanie kolekcji dla dzieci w LINQ

Każda kolekcja Gig ma kolekcję Acts.

Używanie Linq Chcę zapytać o moją kolekcję koncertów, aby zdobyć wszystkie miejsca, gdzie aktem ma na przykład 7 znaków.

act.id = 7; 

Więc zacząłem pisanie ...

return from gig in qry 
     where gig.Acts //not sure how to do this bit 
     select gig; 

Ale nie jestem pewien, jak można ustawić warunki na gromadzeniu dziecko zwanych czynów.

Wszelkie pomysły?

Odpowiedz

7
var x = gigs.Where(g=>g.Acts.Select(a=>a.ID).Contains(7)); 

te dwie kwerendy również powrócić takie same:

var x = gigs.Where(g=>g.Acts.Count(a=>a.ID == 7) > 0); 

var x = gigs.Where(g=>g.Acts.FirstOrDefault(a=>a.ID == 7) != null); 
+0

LINQ jest naprawdę dziwne, ponieważ istnieje kilka sposobów na napisanie tego samego zapytania. –

+0

Tak więc pełna prośba to .... var x = gigs.Where (g => g.Acts.Select (a => a.Artist.ID) .Contains (7)); Jeśli liczba artystów jest zerowa (co jest całkowicie poprawne), otrzymuję wyjątek ... "Dzielone. Artysta Artystyczny" z "Dzielone.Do.Act" niezgodne z prawem na typie "System.Collections.Generic.List" 1 [Shared.DO.Act] Hmmm myśli? – iasksillyquestions

+0

Po prostu go zmodyfikuj, najpierw popatrz na artystę, przed sprawdzeniem ID: var x = gigs.Where (g => g.Acts.Select (a => a.Artysta). Wybierz (b => b.ID) .Contains (7)); lub –

11

Zasadniczo takie same jak Mike_G, tylko bardziej gadatliwy składni i korzystania z równości.

var myCollection = from gig in qry 
        where gig.Acts.Any(act => act.ID == 7) 
        select gig; 

Just an edit wnieść uwagi do odpowiedzi:

Właściwie zapytanie jest dla identyfikatora na państwo (Artist) na obiekcie akt, który może być null.

nowy Zapytanie:

var myCollection = from gig in qry 
        where gig.Acts.Any(act => (null != act.Artist) && (act.Artist.ID == 7)) 
        select gig; 
+0

Pozdrawiam, ale w rzeczywistości jest trochę wolna, ponieważ Acts to same kolekcje, które nie mają własności ID. –

+0

tak, zdałem sobie sprawę, że po napisaniu tego ... Derp, właśnie zamierzał edytować. –

+0

Całkowicie zapomniałem o Any! Zastanawiam się, które z wymienionych zapytań jest najszybsze. –

Powiązane problemy