C# LINQ Select
last modified January 19, 2024
In this article we show how to map elements to an expression with LINQ's Select method and select clause.
Language-Integrated Query (LINQ) is a domain-specific language for querying data from various data sources, including arrays, lists, XML files, or databases.
The select clause or the Select method projects each
element of a sequence into a new form. It selects, projects and transforms
elements in a collection. The Select is usually called Map in other languages. 
The Enumerable.Select method takes a selector function as a
parameter. The selector is a transform function which is applied to each source
element.
C# LINQ Select simple example
The first example is a simple program which uses LINQ Select.
List<int> vals = [1, 2, 3, 4, 5, 6];
var res = vals.Select(e => e * 2);
Console.WriteLine(string.Join(',', res));
The program defines a list of integers. All elements are multiplied by two.
var res = vals.Select(e => e * 2);
The Select method applies the given lambda expression on each of 
the elements. It returns a sequence of values modified by the selector function.
$ dotnet run 2,4,6,8,10,12
C# LINQ Func selector
Func is a built-in generic delegate type. It can be used with a
method, an anonymous method or a lambda expression.  
List<int> vals = [1, 2, 3, 4, 5, 6];
Func<int, int> byfive = e => e * 5; 
var res = vals.Select(byfive);
Console.WriteLine(string.Join(',', res));
The program applies the Func delegate on the elements of the list.
$ dotnet run 5,10,15,20,25,30
C# LINQ select clause
Query expressions are an alternative LINQ syntax. In a query expression, we use 
the select clause. 
List<string> words = ["sky", "cup", "loud", "war", "water"];
var res = from word in words
          select word.Length;
Console.WriteLine(string.Join(',', res));
In the program, we transform a list of words into a sequence of word lengths.
$ dotnet run 3,3,4,3,5
C# LINQ selector with index
We can pass the index of the element to the selector function.
List<string> words = ["sky", "cup", "loud", "war", "water"];
var res = words.Select((e, idx) => new { idx, len = e.Length });
foreach (var e in res)
{
    Console.WriteLine($"{e}");
}
In the program, the resulting object includes also the index of the element.
$ dotnet run
{ idx = 0, len = 3 }
{ idx = 1, len = 3 }
{ idx = 2, len = 4 }
{ idx = 3, len = 3 }
{ idx = 4, len = 5 }
C# LINQ select projection
The select clause also performs projections. A projection is a
selection of specific fields from the returned objects. 
List<User> users =
[
    new ("John", "Doe", 1230),
    new ("Lucy", "Novak", 670),
    new ("Ben", "Walter", 2050),
    new ("Robin", "Brown", 2300),
    new ("Amy", "Doe", 1250),
    new ("Joe", "Draker", 1190),
    new ("Janet", "Doe", 980),
    new ("Albert", "Novak", 1930),
];
var res = from user in users
          orderby user.Salary
          select user.Salary;
Console.WriteLine(string.Join('\n', res));
record User(string FirstName, string LastName, int Salary);
We have list of users having three fields: first name, last name, and salary. We sort the users by salary and pick only the salary field in the resulting sequence.
$ dotnet run 670 980 1190 1230 1250 1930 2050 2300
Source
In this article we have presented the LINQ Select operation.
Author
List all C# tutorials.