Série LINQ 03 - Where II 
Autor: Natanael Santos | Publicado: 2012-09-06T09:25:00-03:00


WHERE

A cláusula where é usado em uma expressão de consulta para especificar os elementos da fonte de dados que será devolvido na consulta. Aplica-se uma condição booleana para cada elemento de origem (referenciado pela variável de intervalo) e retorna aqueles para os quais a condição especificada é verdadeira. Uma expressão de consulta simples pode conter várias cláusulas WHERE e uma cláusula simples pode conter subexpressões múltipla de predicados.

Exemplos

No exemplo seguinte, caso&nbsp;não&nbsp;tivesse a cláusula where todos os elemento da fonte de dados iriam ser imprimindo, mas a condição é(num &lt; 5).



//fonte de dados

int[] tbNumero = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };



//Filtra o a consulta com a condição de que num deve ser
menor que 5

var query = from num in tbNumero

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where num &lt; 5

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select
num;



//Imprime a consulta query

foreach (var n in query)

{
&nbsp; Console.Write(n.ToString() + " ");



}






//Saída: 4 1 3 2 0



Dentro de uma cláusula where, &nbsp;você pode especificar quantas condições forem necessárias usando os operadores &amp;&amp;(and) e | |(or). No exemplo a seguir, a consulta especifica duas condições, a fim de&nbsp;selecionar&nbsp;apenas os números pares e que são menores que cinco.



//Fonte de dados

int[] tbNumero = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };



//Cria uma consulta com duas condições

var query = from num in tbNumero

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where ((num &lt; 5) &amp;&amp; (num % 2 == 0))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select num;



//Imprime a consulta

foreach (var s in query)

{

&nbsp;&nbsp;Console.Write(s.ToString() + " ");

}




// Saída: 4 2 0



Uma cláusula where conter um ou mais métodos que retornam valores booleanos. No exemplo a seguir, a cláusula utiliza um método para determinar se o valor é par ou ímpar.



//Método estático.

static bool IsPar(int i)

{

&nbsp;&nbsp;return
i % 2 == 0;

}



public static void Main()

{

&nbsp;&nbsp;//Fonte de Dados

&nbsp;&nbsp;int[] tbNumero = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };



&nbsp;&nbsp;var query = from num in tbNumero

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where IsPar(num)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select num;



&nbsp;&nbsp;//Imprime a consulta

&nbsp;&nbsp;foreach(var n in query)

&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;Console.Write(n.ToString() + " ");



&nbsp; }



}




//Saída: 4 8 6 2 0



Observações



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



Se uma condição especificada não é válido para os elementos na fonte de dados, um erro de tempo de compilação irá resultar.





REFERÊNCIAS



Documentação MSDN - LINQ&nbsp;