2009-02-06 8 views
9

Tengo una colección de objetos llamada Gigs.Consulta de colecciones de niños en LINQ

Cada Gig tiene una colección Acts.

Usando LINQ Quiero consultar mi colección de conciertos para obtener todos los conciertos, donde con un acto que tiene un diámetro interior de 7, por ejemplo.

act.id = 7; 

así que empecé escribiendo ...

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

pero no estoy seguro de cómo configurar las condiciones de recolección en los niños llamados actos.

¿Alguna idea?

Respuesta

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

estas dos consultas también devuelven el mismo:

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 es realmente, extraño ya que hay un par de maneras de escribir la misma consulta. –

+0

Así la solicitud completa es .... var x = gigs.Where (g => g.Acts.Select (a => a.Artist.ID) .Contains (7)); Si los artistas son nulos (lo cual es perfectamente válido) recibo una excepción ... 'Shared.DO.Artist Artist' de 'Shared.DO.Act' no es legal en el tipo 'System.Collections.Generic.List' 1 [Shared.DO.Act] Hmmm thoughts? – iasksillyquestions

+0

basta con modificar también mira el artista en primer lugar, antes de comprobar el ID: var x = gigs.Where (g => g.Acts.Select (a => a.Artist) .Elija (b => b.ID) .Contiene (7)); o –

11

En esencia, el mismo que Mike_G, única sintaxis más detallado y el uso de la igualdad.

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

Sólo una edición para traer observaciones a la respuesta:

En realidad consulta es para una identificación de un miembro (Artista) en el objeto de la Ley que puede ser nulo.

nueva consulta:

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

El suyo está realmente un poco apagado ya que Acts es una colección en sí misma, que no tiene una propiedad de ID. –

+0

sí me di cuenta de que después de que lo escribí ... Derp, iba a editar. –

+0

¡Me olvidé por completo de Any! Me pregunto cuál de todas las consultas enumeradas, que es la más rápida. –