2010-03-02 27 views
47

tengo 2 una clase de:lista de consultas LINQ contiene una lista

public class ObjectA 
{ 
    public int Id; 
    public string Name; 
} 

public class ObjectB 
{ 
    public int Id; 
    public string Name; 
    public List<ObjectA> ListOfObjectA; 
} 

así que tengo dos listas: una de ObjectB (ListObjectB) y otro contiene una lista de identificadores de de Objecta (llamado ListOfIdsA). Si esto quiero obtener una lista de ObjectB donde ObjectB.ListOfObjectA está en el ListOfIdsA.

Mi enfoque primera (y mal) fue

ListObjectB.Where(p=> ListOfIdsA.Contains(p.ListOfObjectA.Select(b=>b.Id))) 

Pero esto, obviamente, se produce una excepción. Lo busco en Google, stackoverflowed, pero estoy pensando que mis habilidades de búsqueda no van tan bien en esto, ¿alguien puede dar un boletín ninja de esto? (prefereably en la expresión lambda)

Respuesta

91

¿Estás tratando de obtener una lista de todos los ObjectBs donde de los ObjectAs están en ListOfIdsA, o cualquier de ellos?

Creo que desee, ya sea: (. Usted puede también querer hacer ListOfIdsA un HashSet<string> si es de tamaño significativo, por cierto)

ListObjectB.Where(p => p.ListOfObjectA.Any(x => ListOfIdsA.Contains(x.Id))) 

o

ListObjectB.Where(p => p.ListOfObjectA.All(x => ListOfIdsA.Contains(x.Id))) 

+0

Aprende algo nuevo todos los días ... por alguna razón estaba pensando que los métodos de extensión eran la forma de resolver este problema. –

+0

Lo quiero cualquiera de ellos. Thx para la pronta respuesta (fue mi primera pregunta aquí, y demonios, ¡eso fue rápido!) – Berto

+2

@Justin: Bueno, dónde, todos y cualesquiera * son * métodos de extensión :) –

Cuestiones relacionadas