Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Użyj klauzuli where w wyrażeniu zapytania, aby określić, które elementy ze źródła danych mają być zwracane. Stosuje warunek logiczny (predykat) do każdego elementu źródłowego (odwołuje się do zmiennej zakresu) i zwraca te elementy, dla których określony warunek ma wartość true. Jedno wyrażenie zapytania może zawierać wiele where klauzul, a pojedyncza klauzula może zawierać wiele podwyrażeń podrzędnych predykatu.
Dokumentacja języka C# zawiera ostatnio wydaną wersję języka C#. Zawiera również początkową dokumentację dla funkcjonalności w publicznych wersjach testowych nadchodzącego wydania języka.
Dokumentacja identyfikuje dowolną funkcję po raz pierwszy wprowadzoną w ostatnich trzech wersjach języka lub w bieżącej publicznej wersji zapoznawczej.
Wskazówka
Aby dowiedzieć się, kiedy funkcja została po raz pierwszy wprowadzona w języku C#, zapoznaj się z artykułem dotyczącym historii wersji języka C#.
W poniższym przykładzie klauzula where filtruje wszystkie liczby z wyjątkiem tych, które są mniejsze niż pięć. Jeśli usuniesz klauzulę where , zapytanie zwróci wszystkie liczby ze źródła danych. Wyrażenie num < 5 jest predykatem, który zapytanie ma zastosowanie do każdego elementu.
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
W ramach jednej where klauzuli można określić dowolną liczbę predykatów w razie potrzeby przy użyciu operatorów &&i||. W poniższym przykładzie zapytanie określa dwa predykaty, aby wybrać tylko liczby parzyse, które są mniejsze niż pięć.
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() + " ");
}
Console.WriteLine();
// Create the query with two where clause.
var queryLowNums3 =
from num in numbers
where num < 5
where num % 2 == 0
select num;
// Execute the query
foreach (var s in queryLowNums3)
{
Console.Write(s.ToString() + " ");
}
}
}
// Output:
// 4 2 0
// 4 2 0
Klauzula where może zawierać co najmniej jedną metodę zwracającą wartości logiczne. W poniższym przykładzie klauzula where używa metody w celu określenia, czy bieżąca wartość zmiennej zakresu jest parzysta, czy nieparzysta.
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) => i % 2 == 0;
}
//Output: 4 8 6 2 0
Uwagi
Klauzula where jest mechanizmem filtrowania. Można umieścić go niemal wszędzie w wyrażeniu zapytania, z wyjątkiem tego, że nie może być pierwszą ani ostatnią klauzulą. Klauzula where może pojawić się przed lub po klauzuli grupy w zależności od tego, czy należy filtrować elementy źródłowe przed lub po ich zgrupowaniu.
Jeśli określisz predykat, który nie jest prawidłowy dla elementów w źródle danych, zapytanie spowoduje wystąpienie błędu czasu kompilacji. Ten błąd jest jedną z zalet silnego sprawdzania typów zapewnianego przez LINQ.
W czasie where kompilacji słowo kluczowe jest konwertowane na wywołanie Where metody Standard Query Operator.