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);
}

輸出:

鮑勃·
傑克·
吉姆·
約翰

.NET 小提琴現場演示