Compartilhar via


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

O where em uma expressão de consulta, a cláusula é usada para especificar quais elementos da fonte de dados serão retornados na expressão de consulta. Ele se aplica a uma condição booleana (predicado) a cada elemento de origem (referenciado pela variável de intervalo) e retorna aqueles para os quais a condição especificada for verdadeira. Uma expressão de consulta simples pode conter vários where cláusulas e uma única cláusula podem conter vários subexpressões predicados.

Exemplo

No exemplo a seguir, o where cláusula filtra todos os números, exceto aqueles que são menos de cinco. Se você remover o where cláusula, todos os números da fonte de dados seriam retornados. A expressão num < 5 é o predicado que é aplicado 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

Em um único where cláusula, você pode especificar quantos predicados conforme necessário usando o & & e | operadores. No exemplo a seguir, a consulta especifica dois predicados para selecionar apenas os que são menos de cinco números pares.

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

A where cláusula pode conter um ou mais métodos que retornam valores booleanos. No exemplo a seguir, o 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)
    {
        return i % 2 == 0;
    }    
}
//Output: 4 8 6 2 0

Comentários

O where cláusula é um mecanismo de filtragem. Ele pode ser posicionado praticamente em qualquer lugar em uma expressão de consulta, exceto que ele não pode ser a cláusula primeira ou última. A where cláusula pode aparecer antes ou depois de um grupo cláusula dependendo se você tem que filtrar os elementos de origem, antes ou depois que eles são agrupados.

Se um predicado especificado não é válido para os elementos na fonte de dados, resultará um erro de tempo de compilação. Esta é uma das vantagens da forte verificação de tipos fornecida pelo LINQ.

No momento da compilação do where palavra-chave é convertida em uma chamada para o Where o método do operador de consulta padrão.

Consulte também

Referência

Cláusula from (Referência de C#)

Cláusula select (Referência de C#)

Conceitos

Filtrando dados

Expressões de consulta LINQ (Guia de Programação em C#)

Outros recursos

Palavras-chave de consulta (Referência de C#)

Introdução a LINQ em C#