LINQ:如何将元素列表附加到另一个列表中

时间:2010-01-14 05:59:05

标签: c# linq

我有以下课程

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

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

我可以使用以下代码

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

但它是如此丑陋和冗长的啰嗦,我想每次写作都呕吐。

有什么想法吗?

3 个答案:

答案 0 :(得分: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>();
}

答案 1 :(得分:3)

您只需使用SelectMany即可展平List<int>

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

答案 2 :(得分:0)

...或汇总:

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