Compartir a través de


where (Cláusula, Referencia de C#)

Actualización: noviembre 2007

La cláusula where se utiliza en una expresión de consulta para especificar qué elementos del origen de datos se devolverán en la expresión de consulta. Aplica una condición Booleana (predicado) a cada elemento de origen (al que se hace referencia mediante la variable de rango) y devuelve aquéllos para los que la condición especificada es verdadera. Una expresión de consulta única puede contener varias cláusulas where, y una cláusula única puede contener varias subexpresiones de predicado.

Ejemplo

En el ejemplo siguiente, la cláusula where deja fuera todos los números excepto aquéllos que son menores que cinco. Si quita la cláusula where, se devolverían todos los números del origen de datos. La expresión num < 5 es el predicado que se 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 una única cláusula where , puede especificar tantos predicados como sea necesario utilizando los operadores && y ||. En el ejemplo siguiente, la consulta especifica dos predicados para seleccionar sólo los números pares 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() + " ");
        }            
    }
}
// Output: 4 2 0

Una cláusula where puede contener uno o más métodos que devuelven valores booleanos. En el ejemplo siguiente, la cláusula where utiliza un método para determinar si el valor actual de la variable de rango es par o impar.

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

Comentarios

La cláusula where es un mecanismo de filtrado. Se puede colocar prácticamente en cualquier parte en una expresión de consulta, pero no puede ser la primera o la última cláusula. Una cláusula where puede aparecer antes o después de una cláusula group dependiendo de si tiene que filtrar los elementos de origen antes o después de agruparlos.

Si un predicado especificado no es válido para los elementos del origen de datos, se producirá un error en tiempo de compilación. Ésta es una ventaja de la comprobación estricta de tipos que proporciona LINQ.

En tiempo de compilación, la palabra clave where se convierte en una llamada a método para el operador de consulta estándar Where.

Vea también

Conceptos

Filtrar datos

Expresiones de consultas con LINQ (Guía de programación de C#)

Referencia

from (Cláusula, Referencia de C#)

select (Cláusula, Referencia de C#)

Otros recursos

Palabras clave de consultas (Referencia de C#)

Introducción a LINQ en C#