2011-09-20 20 views
7

Tengo una lista de clase A, clase A contiene una lista de clase B. Quiero operar en todas las instancias de B dentro de todas las instancias de la clase A.Linq - operando en listas de listas

var myListOfA = new List<A>(); 

class A 
{ 
    public List<B> ListOfB; 
} 

¿Cómo puedo iterar sobre todo B decir foreach(var b in myListOfA.ListOfB){}?

Respuesta

9

Puede utilizar SelectMany:

foreach(var b in myListOfA.SelectMany(a => a.ListofB)) 

verlo en acción en ideone.com.

+1

Ahh, había intentado 'Seleccionar' que no funcionó (parece obvio ahora), en el clavo. Gracias. – Chris

2

otra forma en que funciona bien para lo que pienso de objetos anidados es:

(from A objA in myListOfA 
    from B objB in objA.ListOfB 
     select objB); 

esta voluntad "en abanico" de la lista de B dentro de todas las a en la lista principal.

+0

Tenga en cuenta que este es el azúcar sintáctico para 'SelectMany', pero estoy de acuerdo, es más fácil de leer a veces. – Jens

+0

sí, definitivamente es solo otra forma de usar selectmany, solo lo quería aquí para propósitos de referencia –