Tarik Tarik - 8 months ago 76
C# Question

Difference Between Select and SelectMany

I've been searching the difference between

but I haven't been able to find a suitable answer. I need to learn the difference when using LINQ To SQL but all I've found are standard array examples.

Can someone provide a LINQ To SQL example?


SelectMany flattens queries that return lists of lists. For example

public class PhoneNumber
    public string Number { get; set; }

public class Person
    public IEnumerable<PhoneNumber> PhoneNumbers { get; set; }
    public string Name { get; set; }

IEnumerable<Person> people = new List<Person>();

// Select gets a list of lists of phone numbers
IEnumerable<IEnumerable<PhoneNumber>> phoneLists = people.Select(p => p.PhoneNumbers);

// SelectMany flattens it to just a list of phone numbers.
IEnumerable<PhoneNumber> phoneNumbers = people.SelectMany(p => p.PhoneNumbers);

// And to include data from the parent in the result: 
// pass an expression to the second parameter (resultSelector) in the overload:
var directory = people
   .SelectMany(p => p.PhoneNumbers,
               (parent, child) => new { parent.Name, child.Number });

SelectMany - StackOverFlow Docs