quinta-feira, 6 de setembro de 2012

Série LINQ 03 - Where II

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 não tivesse a cláusula where todos os elemento da fonte de dados iriam ser imprimindo, mas a condição é(num < 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
                where num < 5
                select num;

//Imprime a consulta query
foreach (var n in query)
{
  Console.Write(n.ToString() + " ");
}


//Saída: 4 1 3 2 0



Dentro de uma cláusula where,  você pode especificar quantas condições forem necessárias usando os operadores &&(and) e | |(or). No exemplo a seguir, a consulta especifica duas condições, a fim de selecionar 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
               where ((num < 5) && (num % 2 == 0))
               select num;

//Imprime a consulta
foreach (var s in query)
{
  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)
{
  return i % 2 == 0;
}

public static void Main()
{
  //Fonte de Dados
  int[] tbNumero = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

  var query = from num in tbNumero
              where IsPar(num)
              select num;

  //Imprime a consulta
  foreach(var n in query)
  {
    Console.Write(n.ToString() + " ");

  }

}

//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 




0 comentários:

Postar um comentário