LINQ Onde

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 da sourcesequência.
  • sourceé uma sequência de entrada para filtrar com o tipo de IEnumerable<T>.
  • predicateé uma função que testa o elemento de sourcecontra 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 foreachou 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
9Linguagem de código:  texto simples  ( texto simples )

Neste exemplo, o Where()método filtra o scoresarray com base na condição n >=5.

A expressão lambda n => n >= 5define 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
8Linguagem 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
9Linguagem 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
AnaLinguagem 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 < 3Linguagem de código:  C#  ( cs )

A expressão lambda name => name.length < 3define 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, Joee 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,000USD:

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.00Linguagem 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *