Compartilhar via


cláusula where (Referência de C#)

Use a where cláusula em uma expressão de consulta para especificar quais elementos da fonte de dados retornar. Ele aplica uma condição booliana (predicado) a cada elemento de origem (referenciado pela variável de intervalo) e retorna os elementos para os quais a condição especificada é verdadeira. Uma única expressão de consulta pode conter várias where cláusulas e uma única cláusula pode conter várias subexpressões de predicado.

A linguagem C# faz referência a documentos da versão mais recentemente lançada da linguagem C#. Ele também contém a documentação inicial para funcionalidades em pré-visualizações públicas para o próximo lançamento do idioma.

A documentação identifica qualquer recurso introduzido pela primeira vez nas três últimas versões do idioma ou nas versões prévias públicas atuais.

Dica

Para descobrir quando um recurso foi introduzido pela primeira vez em C#, consulte o artigo sobre o histórico de versão da linguagem C#.

No exemplo a seguir, a where cláusula filtra todos os números, exceto aqueles com menos de cinco. Se você remover a where cláusula, a consulta retornará todos os números da fonte de dados. A expressão num < 5 é o predicado que a consulta aplica a cada elemento.

class WhereSample
{
    static void Main()
    {
        // Simple data source. Arrays support IEnumerable<T>.
        int[] numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];

        // Simple query with one predicate in where clause.
        var queryLowNums =
            from num in numbers
            where num < 5
            select num;

        // Execute the query.
        foreach (var s in queryLowNums)
        {
            Console.Write(s.ToString() + " ");
        }
    }
}
//Output: 4 1 3 2 0

Dentro de uma única where cláusula, você pode especificar quantos predicados forem necessários usando o &&> e || os operadores. No exemplo a seguir, a consulta especifica dois predicados para selecionar apenas os números par que são menores que cinco.

class WhereSample2
{
static void Main()
{
    // Data source.
    int[] numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];

    // Create the query with two predicates in where clause.
    var queryLowNums2 =
        from num in numbers
        where num < 5 && num % 2 == 0
        select num;

    // Execute the query
    foreach (var s in queryLowNums2)
    {
        Console.Write(s.ToString() + " ");
    }
    Console.WriteLine();

    // Create the query with two where clause.
    var queryLowNums3 =
        from num in numbers
        where num < 5
        where num % 2 == 0
        select num;

    // Execute the query
    foreach (var s in queryLowNums3)
    {
        Console.Write(s.ToString() + " ");
    }
}
}
// Output:
// 4 2 0
// 4 2 0

Uma where cláusula pode conter um ou mais métodos que retornam valores boolianos. No exemplo a seguir, a where cláusula usa um método para determinar se o valor atual da variável de intervalo é par ou ímpar.

class WhereSample3
{
    static void Main()
    {
        // Data source
        int[] numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];

        // Create the query with a method call in the where clause.
        // Note: This won't work in LINQ to SQL unless you have a
        // stored procedure that is mapped to a method by this name.
        var queryEvenNums =
            from num in numbers
            where IsEven(num)
            select num;

         // Execute the query.
        foreach (var s in queryEvenNums)
        {
            Console.Write(s.ToString() + " ");
        }
    }

    // Method may be instance method or static method.
    static bool IsEven(int i) => i % 2 == 0;
}
//Output: 4 8 6 2 0

Observações

A where cláusula é um mecanismo de filtragem. Você pode posicioná-la em praticamente qualquer lugar em uma expressão de consulta, exceto que não pode ser a primeira ou a última cláusula. Uma where cláusula pode aparecer antes ou depois de uma cláusula de grupo , dependendo se você precisa filtrar os elementos de origem antes ou depois de eles serem agrupados.

Se você especificar um predicado que não seja válido para os elementos na fonte de dados, a consulta resultará em um erro de tempo de compilação. Esse erro é um benefício da verificação de tipo forte que o LINQ fornece.

No momento da compilação, a where palavra-chave é convertida em uma chamada para o Where método Operador de Consulta Padrão.

Consulte também