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

A cláusula where é usada em uma expressão de consulta para especificar quais elementos da fonte de dados serão retornados na expressão de consulta.The where clause is used in a query expression to specify which elements from the data source will be returned in the query expression. Aplica-se uma condição booliana (predicate) para cada elemento de origem (referenciado pela variável de intervalo) e retorna aqueles para os quais a condição especificada for verdadeira.It applies a Boolean condition (predicate) to each source element (referenced by the range variable) and returns those for which the specified condition is true. Uma única expressão de consulta pode conter várias cláusulas where e uma única cláusula pode conter várias subexpressões de predicado.A single query expression may contain multiple where clauses and a single clause may contain multiple predicate subexpressions.

ExemploExample

No exemplo a seguir, a cláusula where filtra todos os números, exceto aqueles que são menores que cinco.In the following example, the where clause filters out all numbers except those that are less than five. Se você remover a cláusula where, todos os números da fonte de dados serão retornados.If you remove the where clause, all numbers from the data source would be returned. A expressão num < 5 é o predicado aplicado a cada elemento.The expression num < 5 is the predicate that is applied to each element.

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

ExemploExample

Dentro de uma única cláusula where, você pode especificar tantos predicados quanto necessário usando os operadores && e ||.Within a single where clause, you can specify as many predicates as necessary by using the && and || operators. No exemplo a seguir, a consulta especifica dois predicados para selecionar apenas os números pares que são menores que cinco.In the following example, the query specifies two predicates in order to select only the even numbers that are less than five.

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

ExemploExample

Uma cláusula where pode conter um ou mais métodos que retornam valores boolianos.A where clause may contain one or more methods that return Boolean values. No exemplo a seguir, a cláusula where usa um método para determinar se o valor atual da variável de intervalo é par ou ímpar.In the following example, the where clause uses a method to determine whether the current value of the range variable is even or odd.

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áriosRemarks

A cláusula where é um mecanismo de filtragem.The where clause is a filtering mechanism. Ela pode ser posicionada em quase qualquer lugar em uma expressão de consulta, exceto que ela não pode ser a primeira ou a última cláusula.It can be positioned almost anywhere in a query expression, except it cannot be the first or last clause. A cláusula where pode aparecer antes ou depois de uma cláusula group dependendo se você tiver que filtrar os elementos de origem antes ou depois de eles serem agrupados.A where clause may appear either before or after a group clause depending on whether you have to filter the source elements before or after they are grouped.

Se um predicado especificado não for válido para os elementos na fonte de dados, o resultado será um erro em tempo de compilação.If a specified predicate is not valid for the elements in the data source, a compile-time error will result. Essa é uma vantagem da verificação de tipo forte fornecida pelo LINQLINQ.This is one benefit of the strong type-checking provided by LINQLINQ.

Em tempo de compilação, a palavra-chave where é convertida em uma chamada para o método de operador de consulta padrão Where.At compile time the where keyword is converted into a call to the Where Standard Query Operator method.

Consulte tambémSee also