2009-02-06 7 views
9

J'ai une collection d'objets appelée Gigs. Chaque Gig a une collection Acts. En utilisant Linq je veux interroger ma collection de concerts pour obtenir tous les concerts où avec un acte qui a un identifiant de 7 par exemple.Interrogation des collections enfant dans LINQ

act.id = 7; 

Alors j'ai commencé ... writting

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

Mais je ne sais pas comment vous définissez les conditions sur la collecte des enfants dits actes.

Des idées?

Répondre

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

ces deux requêtes renvoient aussi le même:

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 est vraiment, bizarre car il y a deux manières d'écrire la même requête. –

+0

La requête complète est donc ... var x = gigs.Where (g => g.Acts.Select (a => a.Artist.ID) .Contains (7)); Si Artists est null (ce qui est parfaitement valide), j'obtiens une exception ... 'Shared.DO.Artist Artist' de 'Shared.DO.Act' n'est pas légal sur le type 'System.Collections.Generic.List' 1 [Shared.DO.Act] Hmmm pensées? – iasksillyquestions

+0

Juste le modifier aussi regarder d'abord l'artiste, avant de vérifier l'ID: var x = gigs.Where (g => g.Acts.Select (a => a.Artist) .Sélectionner (b => b.ID). Contient (7)); ou –

11

essentiellement les mêmes que Mike_G, seule syntaxe plus bavard et en utilisant l'égalité.

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

Juste modifié pour apporter des commentaires à la réponse:

En fait, la requête est un ID sur un élément (Artiste) sur l'objet loi qui peut être nul.

nouvelle requête:

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

Le tien est en fait un peu éteint puisque Acts est une collection elle-même, qui n'a pas de propriété d'ID. –

+0

oui je me suis rendu compte qu'après que je l'ai écrit .. Derp, allait juste éditer. –

+0

J'ai complètement oublié Any! Je me demande laquelle de toutes les requêtes énumérées, qui est la plus rapide. –

Questions connexes