C# Language SelectMany

Download C# Language for free


The SelectMany linq method 'flattens' an IEnumerable<IEnumerable<T>> into an IEnumerable<T>. All of the T elements within the IEnumerable instances contained in the source IEnumerable will be combined into a single IEnumerable.

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

If you use a selector function which turns input elements into sequences, the result will be the elements of those sequences returned one by one.

Note that, unlike Select(), the number of elements in the output doesn't need to be the same as were in the input.

More real-world example

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)



Live Demo on .NET Fiddle

SelectMany: Flattening a sequence of sequences