2010-01-14 8 views
6

je la classe suivanteLINQ: Comment Append Liste des éléments dans une autre liste

public class Element 
{ 
    public List<int> Ints 
    { 
    get;private set; 
    } 
} 

Compte tenu d'un List<Element>, comment trouver une liste de tous les Ints à l'intérieur du List<Element> LINQ?

je peux utiliser le code suivant

public static List<int> FindInts(List<Element> elements) 
{ 
var ints = new List<int>(); 
foreach(var element in elements) 
{ 
    ints.AddRange(element.Ints); 
} 
return ints; 
} 
} 

Mais il est si laid et de longue haleine que je veux vomir chaque fois que je l'écris.

Des idées?

Répondre

10
return (from el in elements 
     from i in el.Ints 
     select i).ToList(); 

ou peut-être juste:

return new List<int>(elements.SelectMany(el => el.Ints)); 

BTW, vous aurez probablement envie d'initialiser la liste:

public Element() { 
    Ints = new List<int>(); 
} 
+0

Y at-il une raison que vous avez utilisé "nouvelle liste (x)" au lieu de "x.ToList()"? –

+1

@Andrew pas spécialement; soit fonctionne, etc –

3

Vous pouvez simplement utiliser SelectMany pour obtenir un aplatir List<int>:

public static List<int> FindInts(List<Element> elements) 
{ 
    return elements.SelectMany(e => e.Ints).ToList(); 
} 
0

... ou agrégation:

List<Elements> elements = ... // Populate  
List<int> intsList = elements.Aggregate(Enumerable.Empty<int>(), (ints, elem) => ints.Concat(elem.Ints)).ToList(); 
Questions connexes