LINQ-obtenir tous les éléments d'une liste à l'intérieur d'une liste?

je suis en train de me frayer un chemin à travers la courbe D'apprentissage qui est LINQ et je pourrais vraiment avoir besoin d'aide. Je ne sais pas si ce que je veux est possible, mais si je devais parier, j'en suis sûr.

j'ai actuellement une liste d'objets appelés _tables et chacun de ces objets contient une autre liste d'objets exposés à travers la propriété, "Index". Essentiellement, j'aimerais terminer avec une Liste qui contient tous les Index de tous les _tables.

Voici ce que j'ai pour l'instant:

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

malheureusement, cela semble me donner une autre liste de listes, mais seulement lorsque la liste des index contient plus d'une valeur... Y a-t-il un moyen d'assembler toutes ces listes sans boucles?

19
demandé sur ppumkin 2010-07-16 20:40:32

4 réponses

vous voulez utiliser le SelectMany méthode d'extension.

_tables.SelectMany(t => t.Indexes)
38
répondu tbischel 2010-07-16 16:42:39

en plus de la réponse de tbischel, la version d'expression de requête de ce que vous cherchez est ci-dessous.

var indexes = from TableInfo tab in _tables 
              from index in tab.Indexes
              select index;
6
répondu Anthony Pegram 2010-07-16 16:46:34

vous n'avez pas besoin de la clause where et vous ne devriez pas non plus avoir besoin de lui dire quel onglet est

Et vous aurez besoin d'utiliser SelectMany

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

Ou vous pouvez le faire comme ceci

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

cela devrait être un peu plus familier syntaz

4
répondu msarchet 2010-07-16 16:52:07
var rows = from item in table select item;
2
répondu Qasims 2012-12-06 11:50:43