How to Use Select and SelectMany Effectively in LINQ
By Tan Lee Published on Feb 22, 2025 100
These methods allow you to project and flatten data in powerful ways, but using them effectively requires a solid understanding of how they behave.
Select
The Select method in LINQ transforms each element of a collection into a new form based on a provided function. It's typically used to project elements into a different shape or format.
For example:
public void SelectMethod() { var numbers = new List<int> { 2, 4, 6, 8, 10 }; var halvedNumbers = numbers.Select(x => x / 2); foreach (var number in halvedNumbers) { Console.WriteLine(number); } }
Output:
1 2 3 4 5
In this example, the Select
method divides each number in the list by 2 and returns a new collection with the halved values.
Let’s consider a list of Person
objects, and we want to extract just their names into a new collection:
public class Person { public string Name { get; set; } public int Age { get; set; } } public void UseSelectMethod() { var people = new List<Person> { new Person { Name = "Alice", Age = 30 }, new Person { Name = "Bob", Age = 25 }, new Person { Name = "Charlie", Age = 35 } }; var names = people.Select(p => p.Name); foreach (var name in names) { Console.WriteLine(name); } }
Output:
Alice Bob Charlie
In this example, Select
is used to extract the Name
property from each Person
object in the list, resulting in a new collection of names.
SelectMany
The SelectMany
method is useful when you have collections of collections. It projects each element of a sequence to an IEnumerable<T>
and then flattens the resulting sequences into one single sequence.
public void SelectManyMethod() { var studentCourses = new List<List<string>> { new List<string> { "Math", "Science" }, new List<string> { "English", "History" }, new List<string> { "Art", "Music" } }; var allCourses = studentCourses.SelectMany(c => c); foreach (var course in allCourses) { Console.WriteLine(course); } }
Output:
Math Science English History Art Music
In this example, SelectMany
flattens the lists of courses for each student into a single sequence, combining all courses into one list.
When to Use Select
vs SelectMany
- Use
Select
when you are transforming each element into a new form (for example, selecting a single property or transforming data). - Use
SelectMany
when dealing with collections of collections and you need to flatten them into one sequence.
Performance Considerations
- Select is very efficient because it does not change the structure of the collection; it simply transforms each element.
- SelectMany can have a larger performance impact, especially when dealing with very large nested collections, as it flattens the entire collection into a single sequence.
- C# LINQ Tutorial
- C# LINQ query and method syntax
- Group by in LINQ
- How to get the index of an element in C# LINQ
- Cannot use a lambda expression as an argument to a dynamically dispatched operation
- How to group by multiple columns using LINQ
- Using LINQ to remove elements from a List<T>
- How to Find XML element by name with XElement in LINQ