Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Verwenden Sie die where Klausel in einem Abfrageausdruck, um anzugeben, welche Elemente aus der Datenquelle zurückgegeben werden sollen. Es wendet eine boolesche Bedingung (Prädikat) auf jedes Quellelement (referenziert durch die Bereichsvariable) an und gibt diese Elemente zurück, für die die angegebene Bedingung wahr ist. Ein einzelner Abfrageausdruck kann mehrere where Klauseln enthalten, und eine einzelne Klausel kann mehrere Prädikatunterausdrücke enthalten.
Die C#-Sprachreferenz dokumentiert die zuletzt veröffentlichte Version der C#-Sprache. Außerdem enthält sie eine erste Dokumentation zu Funktionen in der öffentlichen Vorschau für die kommende Sprachversion.
In der Dokumentation werden alle Features identifiziert, die in den letzten drei Versionen der Sprache oder in der aktuellen öffentlichen Vorschau eingeführt wurden.
Tipp
Informationen dazu, wann ein Feature erstmals in C# eingeführt wurde, finden Sie im Artikel zum Versionsverlauf der C#-Sprache.
Im folgenden Beispiel filtert die where Klausel alle Zahlen aus, mit Ausnahme von Zahlen, die kleiner als fünf sind. Wenn Sie die where Klausel entfernen, gibt die Abfrage alle Zahlen aus der Datenquelle zurück. Der Ausdruck num < 5 ist das Prädikat, das die Abfrage auf jedes Element anwendet.
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
Innerhalb einer einzelnen where Klausel können Sie so viele Prädikate wie nötig angeben, indem Sie die && und || Operatoren verwenden. Im folgenden Beispiel gibt die Abfrage zwei Prädikate an, um nur die geraden Zahlen auszuwählen, die kleiner als fünf sind.
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
Eine where Klausel kann eine oder mehrere Methoden enthalten, die boolesche Werte zurückgeben. Im folgenden Beispiel bestimmt die where Klausel mithilfe einer Methode, ob der aktuelle Wert der Bereichsvariable gerade oder ungerade ist.
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
Bemerkungen
Die where Klausel ist ein Filtermechanismus. Sie können sie fast an einer beliebigen Stelle in einem Abfrageausdruck positionieren, mit der Ausnahme, dass es sich nicht um die erste oder letzte Klausel handeln kann. Eine where Klausel kann entweder vor oder nach einer Gruppenklausel angezeigt werden, je nachdem, ob Sie die Quellelemente vor oder nach der Gruppieren filtern müssen.
Wenn Sie ein Prädikat angeben, das für die Elemente in der Datenquelle ungültig ist, führt die Abfrage zu einem Kompilierungsfehler. Dieser Fehler ist ein Vorteil der starken Typüberprüfung, die LINQ bereitstellt.
Zur Kompilierungszeit wird das where Schlüsselwort in einen Aufruf der Where Standardabfrageoperator-Methode konvertiert.