Resumo : neste tutorial, você aprenderá como usar o Select()
método LINQ para projetar cada elemento de uma sequência em um novo formato.
Introdução ao método LINQ Select
O Select()
método é um método de extensão LINQ. O Select()
método projeta ou transforma cada elemento de uma sequência em uma nova forma.
O seguinte mostra a sintaxe do Select()
método:
IEnumerable<TResult> Select<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, int, TResult> selector
)
Linguagem de código: C# ( cs )
Nesta sintaxe:
TSource
representa o tipo do elemento nasource
sequência.TResult
é o tipo de valor retornado peloselector
.source
é uma sequência de entrada com o tipo IEnumerable<TSource> .selector
é uma função de transformação que se aplica a cada elemento nasource
sequência. Oselector
tem o tipoFunc<TSource, TResult>
. O segundo parâmetro com o tipoint
da função de transformação é o índice do elemento nasource
sequência.
O Select()
método retorna um IEnumerable<T>
cujos elementos são o resultado da função de transformação em cada elemento da source
sequência.
Se o parâmetro source
or selector
for nulo, o Select()
método lançará um arquivo ArgumentNullException
.
Como outros métodos de extensão LINQ, o Select()
método é implementado usando execução adiada. Isso significa que a consulta retornada pelo Select()
método não é executada até que seja enumerada por a foreach
ou chamando seu GetEnumerator()
método.
Exemplos do método LINQ Select()
Vejamos alguns exemplos de uso do Select()
método LINQ.
1) Usando o método LINQ Select() para transformar uma sequência de números inteiros
Os programas a seguir demonstram como usar o Select()
método LINQ para criar uma nova sequência de números que são quadrados dos números originais:
using static System.Console;
var numbers = new[] { 1, 5, 3, 4, 7 };
var squares = numbers.Select(n => n * n);
foreach (var square in squares)
{
WriteLine($"{square} ");
}
Linguagem de código: C# ( cs )
Como funciona.
Primeiro, defina uma matriz de cinco números:
var numbers = new[] { 1, 5, 3, 4, 7 };
Linguagem de código: C# ( cs )
Segundo, crie uma nova sequência de números chamada quadrados usando o Select()
método:
var squares = numbers.Select(n => n * n);
Linguagem de código: C# ( cs )
Usamos a expressão lambda n => n*n
como a função de transformação que pega cada elemento da matriz de números, eleva-o ao quadrado e retorna os números quadrados resultantes como o elemento da nova sequência.
Terceiro, escreva cada elemento da nova sequência no console usando um foreach
loop e Write()
um método:
foreach (var square in squares)
{
Write($"{square} ");
}
Linguagem de código: C# ( cs )
Se você executar o programa, verá a seguinte saída:
1 25 9 16 49
Linguagem de código: C# ( cs )
Observe que você pode encadear o Select()
método com outros métodos de extensões como OrderBy()
,, Where()
etc.
Por exemplo, o programa a seguir demonstra como encadear o Select()
método com o OrderBy()
método para classificar a nova sequência:
using static System.Console;
var numbers = new[] { 1, 5, 3, 4, 7 };
var squares = numbers.Select(n => n * n)
.OrderBy(n => n);
foreach (var square in squares)
{
Write($"{square} ");
}
Linguagem de código: C# ( cs )
Saída:
1 9 16 25 49
Linguagem de código: C# ( cs )
2) Usando o método LINQ Select() para transformar uma sequência de strings
O programa a seguir demonstra como usar Select()
o método para colocar cada string em maiúscula em uma matriz de saudações e escrever a string modificada no console:
using static System.Console;
var greetings = new string[] { "hi","hello","hey", "howdy"};
var results = greetings.Select(
s => s[0].ToString().ToUpper() + s.Substring(1)
);
foreach (var result in results)
{
WriteLine(result);
}
Linguagem de código: C# ( cs )
Primeiro, defina uma matriz de strings chamada greetings
que consiste em quatro strings.
Segundo, crie uma nova sequência de strings chamada results
usando o Select()
método. O lambda expression s => s[0].ToString().ToUpper() + s.Substring(1)
pega cada elemento das saudações e coloca-o em maiúscula.
Terceiro, escreva cada elemento da results
sequência no console:
foreach (var result in results)
{
WriteLine(result);
}
Linguagem de código: C# ( cs )
3) Usando o método LINQ Select() para projetar sobre uma sequência de objetos
O programa a seguir ilustra como usar o Select()
método para obter o nome de cada funcionário:
using static System.Console;
namespace LINQDemo
{
class Employee
{
public string? Name { get; set; }
public string? Department { get; set; }
public int Salary { get; set; }
}
class Program
{
public static void Main()
{
var employees = new List<Employee>() {
new Employee { Name = "John", Department = "HR", Salary = 50000 },
new Employee { Name = "Jane", Department = "IT", Salary = 60000 },
new Employee { Name = "Bob", Department = "HR", Salary = 45000 },
new Employee { Name = "Sara", Department = "IT", Salary = 55000 },
new Employee { Name = "Tom", Department = "IT", Salary = 65000 }
};
var names = employees.Select(e => e.Name);
foreach (var name in names)
{
WriteLine(name);
}
}
}
}
Linguagem de código: C# ( cs )
Como funciona.
Primeiro, defina uma Employee
classe contendo três propriedades Name
,, Department
e Salary
:
class Employee
{
public string? Name { get; set; }
public string? Department { get; set; }
public int Salary { get; set; }
}
Linguagem de código: C# ( cs )
Segundo, defina uma lista de funcionários:
var employees = new List<Employee>() {
new Employee { Name = "John", Department = "HR", Salary = 50000 },
new Employee { Name = "Jane", Department = "IT", Salary = 60000 },
new Employee { Name = "Bob", Department = "HR", Salary = 45000 },
new Employee { Name = "Sara", Department = "IT", Salary = 55000 },
new Employee { Name = "Tom", Department = "IT", Salary = 65000 }
};
Linguagem de código: C# ( cs )
Terceiro, transforme uma lista de Employee
objetos em uma lista de nomes usando o Select()
método. A expressão lambda e => e.Name
retorna o nome completo de cada Employee
objeto:
var names = employees.Select(e => e.Name);
Linguagem de código: C# ( cs )
Finalmente, escreva cada elemento da names
sequência no console:
foreach (var name in names)
{
WriteLine(name);
}
Linguagem de código: C# ( cs )
Saída:
John
Jane
Bob
Sara
Tom
Linguagem de código: C# ( cs )
Além disso, você pode usar o Select()
método para criar uma sequência de elementos com um novo tipo. Por exemplo:
using static System.Console;
namespace LINQDemo
{
class Employee
{
public string? Name { get; set; }
public string? Department { get; set; }
public int Salary { get; set; }
}
class Program
{
public static void Main()
{
var employees = new List<Employee>() {
new Employee { Name = "John", Department = "HR", Salary = 50000 },
new Employee { Name = "Jane", Department = "IT", Salary = 60000 },
new Employee { Name = "Bob", Department = "HR", Salary = 45000 },
new Employee { Name = "Sara", Department = "IT", Salary = 55000 },
new Employee { Name = "Tom", Department = "IT", Salary = 65000 }
};
var payroll = employees.Select(e => new {
e.Name,
e.Salary
});
foreach (var employee in payroll)
{
WriteLine(employee);
}
}
}
}
Linguagem de código: C# ( cs )
Saída:
{ Name = John, Salary = 50000 }
{ Name = Jane, Salary = 60000 }
{ Name = Bob, Salary = 45000 }
{ Name = Sara, Salary = 55000 }
{ Name = Tom, Salary = 65000 }
Linguagem de código: C# ( cs )
Neste exemplo, a expressão lambda retorna um objeto com um novo tipo anônimo com duas propriedades Name
e Salary
:
e => new {
e.Name,
e.Salary
}
Linguagem de código: C# ( cs )
Resumo
- Use o método LINQ
Select()
para projetar cada elemento de uma sequência em um novo formato.