2010-07-16 15 views
17

Actualmente estoy trabajando en la curva de aprendizaje que es LINQ y realmente podría usar algo de ayuda. No sé si lo que deseo es posible, pero si tuviera que apostar, apuesto a que sí.LINQ - ¿Obtiene todos los artículos en una lista dentro de una lista?

Actualmente tengo una lista de objetos llamada _tables y cada uno de estos objetos tiene dentro otra lista de objetos expuestos a través de la propiedad, "Índices". Básicamente, me gustaría terminar con una lista que contenga todos los índices de todas las tablas.

Esto es lo que tengo hasta ahora:

var indexes = from TableInfo tab 
       in _tables 
       where tab.Indexes.Count > 0 
       select tab.Indexes; 

Desafortunadamente, esto me parece estar dando otra lista de listas, pero sólo cuando la lista Índices contiene más de un valor ... ¿Hay alguna manera de juntar todas estas listas sin bucles?

Respuesta

34

Desea utilizar el método de extensión SelectMany.

_tables.SelectMany(t => t.Indexes) 
+0

Acabo de leer esto: http://community.bartdesmet.net/blogs/bart/archive/2008/08/19/probably-the-most-powerful-linq-operator-selectmany.aspx –

5

Además de la respuesta de tbischel, la versión de expresión de consulta de lo que está buscando se encuentra a continuación.

var indexes = from TableInfo tab in _tables 
       from index in tab.Indexes 
       select index; 
4

no es necesario la cláusula de dónde y también no debería ser necesario para decirle qué pestaña es

y necesitará utilizar SelectMany

var indexes = (from tab in _tables).SelectMany(t => t.Indexes) 

O usted podría hacer como este

var indexes = from tab in _tables 
        from t in tab.Indexes 
        select t; 

Eso debería ser un poco más familiar syntaz

2
var rows = from item in table select item; 
Cuestiones relacionadas