A cláusula where é usada em uma expressão de consulta para especificar quais elementos da Origem de dados serão retornados na expressão de consulta. Ele se aplica a uma condição Booleanoa (predicado) a cada elemento de origem (referenciado pela variável de intervalo) e retorna os para o qual a condição especificada for Verdadeiro. Uma expressão de consulta simples pode conter várias cláusulas where e uma única cláusula pode conter Múltiplo subexpressions predicados.
No exemplo a seguir, a cláusula where filtra Tudo números, exceto aqueles que são menos de cinco. Se você remover a cláusula de where, Tudo números da Origem de dados devem ser retornados. A expressão num < 5 é o predicado aplicado 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
Em um Simples cláusula where , você pode especificar quantos predicados conforme necessário usando o e e || operadores. No exemplo a seguir, a consulta Especifica dois predicados em Ordem para selecionar apenas os números de par que são menos de 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
Uma cláusula where pode conter um ou mais métodos que retornam valores booleanos. No exemplo a seguir, a cláusula where usa um método para determinar se o valor atual da variável de intervalo é par ou ímpar.
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
A cláusula where é um mecanismo de filtragem. Ele pode ser posicionado em quase qualquer lugar em uma expressão de consulta, exceto que ele não pode ser a cláusula Primeiro ou Último. Uma cláusula where pode aparecer antes ou após uma cláusula de grupo dependendo se você tem para Filtro os elementos de origem antes ou depois que elas são agrupadas.
Se um predicado especificado não for válido para os elementos na Origem de dados, ocorrerá um erro de tempo de Compilar. Isso é uma vantagem do forte tipo-verificação fornecida pelo LINQ.
Em tempo de Compilar a palavra-chave where é convertida em uma chamada para o Where método operador de consulta padrão.
Conceitos
Referência
Outros recursos