where (Cláusula, Referencia de C#)where clause (C# Reference)

La cláusula where se usa en una expresión de consulta para especificar los elementos del origen de datos que se devuelven en dicha expresión.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 una condición booleana (predicate) a cada elemento de origen (al que hace referencia la variable de rango) y devuelve aquellos en los que la condición especificada se cumple.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. Puede que una sola expresión de consulta contenga varias cláusulas where y que una sola cláusula contenga varias subexpresiones de predicado.A single query expression may contain multiple where clauses and a single clause may contain multiple predicate subexpressions.

EjemploExample

En el ejemplo siguiente, la cláusula where filtra todos los números excepto los que son inferiores a cinco.In the following example, the where clause filters out all numbers except those that are less than five. Si la cláusula where se quita, se devolverán todos los números del origen de datos.If you remove the where clause, all numbers from the data source would be returned. La expresión num < 5 es el predicado que se aplica 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

EjemploExample

En una sola cláusula where, se pueden especificar todos los predicados que sean necesarios mediante los operadores && y ||.Within a single where clause, you can specify as many predicates as necessary by using the && and || operators. En el ejemplo siguiente, la consulta especifica dos predicados para seleccionar únicamente los números pares que sean inferiores a 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

EjemploExample

Puede que una cláusula where contenga uno o más métodos que devuelvan valores booleanos.A where clause may contain one or more methods that return Boolean values. En el ejemplo siguiente, la cláusula where usa un método para determinar si el valor actual de la variable de rango es par o impar.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

ComentariosRemarks

La cláusula where es un mecanismo de filtrado.The where clause is a filtering mechanism. Se puede colocar prácticamente en cualquier parte en una expresión de consulta, pero no puede ser la primera ni la última cláusula.It can be positioned almost anywhere in a query expression, except it cannot be the first or last clause. Puede que una cláusula where aparezca antes o después de una cláusula group, en función de que haya que filtrar los elementos de origen antes o después de agruparlos.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.

Si un predicado especificado no es válido para los elementos del origen de datos, se producirá un error en tiempo de compilación.If a specified predicate is not valid for the elements in the data source, a compile-time error will result. Esta es una de las ventajas de la comprobación estricta de tipos que LINQLINQ ofrece.This is one benefit of the strong type-checking provided by LINQLINQ.

En tiempo de compilación, la palabra clave where se convierte en una llamada al método de operador de consulta estándar Where.At compile time the where keyword is converted into a call to the Where Standard Query Operator method.

Vea tambiénSee also