2010-01-14 108 views
6

我有下面的类LINQ:如何附加元素列表到另一个列表

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

给定一个List<Element>,如何找到使用LINQ的List<Element>内的所有Ints列表?

我可以使用下面的代码

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

但它是如此的丑陋和长篇大论,我想呕吐每次我写它的时候。

任何想法?

回答

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

或者只是:

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

顺便说一句,你可能会想初始化列表:

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

你有什么用 “新目录(X)”,而不是 “x.ToList()” 的理由? – 2013-07-22 17:57:24

+1

@安德鲁不是特别的;或者工作等等 – 2013-07-24 09:05:22

3

您可以简单地使用SelectMany得到一个扁平List<int>

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

...或聚集:

List<Elements> elements = ... // Populate  
List<int> intsList = elements.Aggregate(Enumerable.Empty<int>(), (ints, elem) => ints.Concat(elem.Ints)).ToList(); 
相关问题