Está en la página 1de 5

CAPÍTULO 3

Filtrando datos
LINQ permite filtrar elementos mediante la cláusula where o el método
Where().

3.1 La cláusula where y el método Where()


Tanto la cláusula where como el método Where() permiten especificar qué
elementos del data source serán devueltos por la expresión de consulta. Aplican una
o varias condiciones booleanas (predicado) a cada elemento del data source
(referenciado por la variable de rango) y devuelven una secuencia de tipo
IEnumerable<T> que contiene solo aquellos elementos que satisfacen las
condiciones especificadas.
Una sola expresión de consulta puede contener múltiples cláusulas where y una sola
cláusula puede contener múltiples subexpresiones de predicado.
En el siguiente ejemplo, la cláusula where filtra todos los números excepto aquellos
que son menores que cinco. La expresión num < 5 es el predicado que se aplica a
cada elemento.

La cláusula where es un mecanismo de filtrado. Se puede colocar


prácticamente en cualquier parte de una expresión de consulta, pero no puede ser la
primera ni la última cláusula. Una cláusula where puede aparecer antes o después de
una cláusula groupby, dependiendo de si tiene que filtrar los elementos del data
source antes o después de que sean agrupados.
1
Si un predicado especificado no es válido para los elementos del data source, se
producirá un error en tiempo de compilación. Este es uno de los beneficios de la
verificación estricta de tipos proporcionada por LINQ.
En tiempo de compilación, la palabra clave where se convierte en una llamada al
método Where().

3.2 El método Where()


Tal como se dijo anteriormente, el método Where() permite filtrar una secuencia de
valores basándose en un predicado. Este método tiene dos sobrecargas:

IEnumerable<T> Where<T>(IEnumerable<T>, Func<T, Boolean>)


Filtra una secuencia de valores basándose en un predicado. Devuelve un
IEnumerable<T> que contiene los elementos de la secuencia de entrada que
satisfaces las condiciones especificadas.
Ejemplo:

IEnumerable<T> Where<T>(IEnumerable<T>, Func<T, Int32, Boolean>)

2
Filtra una secuencia de valores basándose en un predicado. El primer parámetro de
la función representa el elemento a testear, mientras que el segundo parámetro
representa el índice de base cero de dicho elemento, el cual se utiliza en la lógica de
la función de predicado. Devuelve un IEnumerable<T> que contiene los elementos
de la secuencia de entrada que satisfacen las condiciones especificadas.
Ejemplo:

Ambas sobrecargas lanzarán una excepción de tipo ArgumentNullException si la


secuencia de entrada o el predicado es null.

3.3 Características
Tanto la cláusula where como el método Where() tienen las siguientes
características:

3.3.1 Predicados con más de una expresión booleana


En una sola cláusula where, se pueden especificar tantas condiciones como sea
necesario mediante el uso de los operadores lógicos && (AND) y || (OR).
En el siguiente ejemplo, el predicado de la consulta está formado por dos
condiciones que permiten seleccionar solo aquellos números pares que sean menores
que cinco.

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

4
5

También podría gustarte