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 




domingo, 2 de setembro de 2012

Série LINQ 02 - Consultas LINQ e Filtro

Este tópico fornece uma breve introdução às expressões de consulta LINQ e alguns dos tipos típicos de operações que você executa em uma consulta.

 Como obter uma fonte de dados
Em uma consulta de LINQ, a primeira etapa é especificar a origem de dados. Em C# como na maioria das linguagens de programação uma variável deve ser declarada antes que ele possa ser usado. Em uma consulta de LINQ , a cláusula from vem primeiro na ordem para apresentar os dados de origem (carro) e o intervalo variável (car).


var selecionarCarro= from car in tbCarro
                        select car;

Provavelmente a operação de consulta mais comum é aplicar um filtro no formulário de uma expressão Booleana. O filtro faz com que a consulta retorne apenas aqueles elementos para os quais a expressão for verdadeira. O resultado é produzido usando a cláusula where. O filtro efeito especifica quais elementos podem excluir a seqüência de origem. No exemplo a seguir, somente os carros que têm um cor azul são retornados.


var selecionarPorCor =   from car in tbCarro
                           where car.cor == "Azul"
                           select car;
 
 
Você pode usar os operadores AND e OR para aplicar em várias expressões, conforme necessário com  clásula a where. Por exemplo, para retornar somente os carros com cores "Azul" AND cujo preço é 50 mil reais , você escreveria o seguinte código:
 
 
 where caro.cor =="Azul" && cust.Preco == 50.000
 
 
Para retornar os carros com cores azul e vermelho, você escreveria o seguinte código:
 
where cust.cor == "Azul" || cust.cor == "Vermelho"