Resumo : neste tutorial, você aprenderá como usar o Where()
método LINQ para filtrar uma sequência de valores com base em uma condição especificada.
Introdução ao método LINQ Where()
LINQ Where()
é um método de extensão que filtra uma sequência de valores com base em uma condição especificada por um predicado:
IEnumerable<TSource> Where<TSource> (
this IEnumerable<TSource> source,
Func<TSource,bool> predicate
);
Linguagem de código: C# ( cs )
Nesta sintaxe:
TSource
é o tipo de elementos dasource
sequência.source
é uma sequência de entrada para filtrar com o tipo deIEnumerable<T>
.predicate
é uma função que testa o elemento desource
contra uma condição especificada.
O Where()
método retorna uma nova sequência com o tipo IEnumerable<TSource>
contendo elementos que satisfazem a condição.
Observe que o Where()
método usa execução adiada. Isso significa que a consulta de retorno do Where()
método não é executada até que seja enumerada por a foreach
ou chamando seu GetEnumerator()
método.
Exemplo do método LINQ Where()
Vejamos alguns exemplos de uso do Where()
método LINQ.
1) Usando o método Where() para filtrar uma sequência de números
O exemplo a seguir usa o Where()
método para filtrar uma sequência de números inteiros e retorna uma nova sequência cujos elementos são maiores ou iguais a 5:
using static System.Console;
int[] scores = { 2, 5, 7, 3, 8, 9 };
var filteredScores = scores.Where(n => n >= 5);
foreach (var score in filteredScores)
{
WriteLine(score);
}
Linguagem de código: C# ( cs )
Saída:
5
7
8
9
Linguagem de código: texto simples ( texto simples )
Neste exemplo, o Where()
método filtra o scores
array com base na condição n >=5
.
A expressão lambda n => n >= 5
define a função de predicado que o Where()
método usa para filtrar a sequência. O resultado é uma nova sequência que contém apenas as pontuações maiores ou iguais a 5.
O exemplo a seguir usa uma condição mais complexa com o &&
operador AND ( ) que filtra as pontuações dentro de um intervalo:
using static System.Console;
int[] scores = { 2, 5, 7, 3, 8, 9 };
var filteredScores = scores.Where(n => n >= 5 && n <= 8);
foreach (var score in filteredScores)
{
WriteLine(score);
}
Linguagem de código: C# ( cs )
Saída:
5
7
8
Linguagem de código: texto simples ( texto simples )
Neste exemplo, a condição filtra apenas pontuações de 5 a 8. Isso equivale a chamar o Where()
método duas vezes:
using static System.Console;
int[] scores = { 2, 5, 7, 3, 8, 9 };
var filteredScores = scores.Where(n => n >= 5)
.Where(n => n <= 8);
foreach (var score in filteredScores)
{
WriteLine(score);
}
Linguagem de código: C# ( cs )
Da mesma forma, você pode usar o operador OR (||) para filtrar e obter os números da matriz de pontuações menores que 5 ou maiores que 8:
using static System.Console;
int[] scores = { 2, 5, 7, 3, 8, 9 };
var filteredScores = scores.Where(n => n < 5 || n > 8);
foreach (var score in filteredScores)
{
WriteLine(score);
}
Linguagem de código: JavaScript ( javascript )
Saída:
using static System.Console;
int[] scores = { 2, 5, 7, 3, 8, 9 };
var filteredScores = scores.Where(n => n < 5 || n > 8);
foreach (var score in filteredScores)
{
WriteLine(score);
}
Linguagem de código: C# ( cs )
Saída:
2
3
9
Linguagem de código: texto simples ( texto simples )
2) Usando o método Where() para filtrar uma sequência de strings
O exemplo a seguir usa o Where()
método para filtrar uma lista de nomes cujos comprimentos são menores ou iguais a 3:
using static System.Console;
var names = new List<string> { "John", "Mary", "Alex", "Tim", "Joe", "Ana" };
var shortNames = names.Where(name => name.Length <= 3);
foreach (var name in shortNames)
{
WriteLine(name);
}
Linguagem de código: C# ( cs )
Saída:
Tim
Joe
Ana
Linguagem de código: C# ( cs )
Neste exemplo, usamos o Where()
método para filtrar a lista de nomes com base na condição:
name.length < 3
Linguagem de código: C# ( cs )
A expressão lambda name => name.length < 3
define a função de predicado que o Where()
método usa para filtrar a lista.
O resultado é uma nova sequência que contém apenas os nomes cujos comprimentos são menores ou iguais a 3 caracteres.
A saída mostra três nomes que satisfazem a condição, Tim
, Joe
e Ana
.
3) Usando o método Where() para filtrar uma sequência de objetos
O programa a seguir usa o Where()
método para filtrar funcionários cujos salários são maiores que 55,000
USD:
using static System.Console;
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 results = employees.Where(e => e.Salary > 55000);
foreach (var employee in results)
{
WriteLine($"{employee.Name} - {employee.Salary:C}");
}
}
}
Linguagem de código: C# ( cs )
Saída:
Jane - $60,000.00
Tom - $65,000.00
Linguagem de código: C# ( cs )
Resumo
- Use o método LINQ
Where()
para filtrar uma sequência de valores com base em uma condição especificada.