C# Language SelectMany

Esempio

Il metodo SelectMany linq 'appiattisce' un oggetto IEnumerable<IEnumerable<T>> in IEnumerable<T> . Tutti gli elementi T all'interno delle istanze IEnumerable contenute nella sorgente IEnumerable verranno combinati in un singolo oggetto IEnumerable .

var words = new [] { "a,b,c", "d,e", "f" };
var splitAndCombine = words.SelectMany(x => x.Split(','));
// returns { "a", "b", "c", "d", "e", "f" }

Se si utilizza una funzione di selezione che trasforma gli elementi di input in sequenze, il risultato saranno gli elementi di tali sequenze restituite una alla volta.

Si noti che, diversamente da Select() , il numero di elementi nell'output non deve necessariamente essere lo stesso dell'input.

Più esempio del mondo reale

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

Produzione:

peso
Jack
Jim
John

Live Demo su .NET Fiddle