我有以下课程
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;
}
}
但它是如此丑陋和冗长的啰嗦,我想每次写作都呕吐。
有什么想法吗?
答案 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();