SelectMany
SelectMany linq 方法将’IEnumerable<IEnumerable<T>>
‘变平为一个 IEnumerable<T>
。源 IEnumerable
中包含的 IEnumerable
实例中的所有 T 元素将合并为单个 IEnumerable
。
var words = new [] { "a,b,c", "d,e", "f" };
var splitAndCombine = words.SelectMany(x => x.Split(','));
// returns { "a", "b", "c", "d", "e", "f" }
如果使用将输入元素转换为序列的选择器函数,则结果将是逐个返回的那些序列的元素。
请注意,与 Select()
不同,输出中的元素数量不需要与输入中的元素数量相同。
更真实的例子
class School
{
public Student[] Students { get; set; }
}
class Student
{
public string Name { get; set; }
}
var schools = new [] {
new School(){ Students = new [] { new Student { Name="Bob"}, new Student { Name="Jack"} }},
new School(){ Students = new [] { new Student { Name="Jim"}, new Student { Name="John"} }}
};
var allStudents = schools.SelectMany(s=> s.Students);
foreach(var student in allStudents)
{
Console.WriteLine(student.Name);
}
输出:
鲍勃·
杰克·
吉姆·
约翰