where-Klausel (C#-Referenz)
Aktualisiert: November 2007
Die where-Klausel wird in einem Abfrageausdruck verwendet, um anzugeben, welche Elemente aus der Datenquelle im Abfrageausdruck zurückgegeben werden. Sie wendet eine boolesche Bedingung (Prädikat) auf die einzelnen Quellelemente an (auf die durch die Bereichsvariable verwiesen wird) und gibt diejenigen zurück, für die die angegebene Bedingung den Wert true hat. Ein einzelner Abfrageausdruck kann mehrere where-Klauseln enthalten, und eine einzelne Klausel kann mehrere Teilausdrücke des Prädikats enthalten.
Beispiel
Im folgenden Beispiel werden durch die where-Klausel alle Zahlen herausgefiltert, die größer als fünf sind. Wenn Sie die where-Klausel entfernen, werden alle Zahlen aus der Datenquelle zurückgegeben. Der Ausdruck num < 5 ist das Prädikat, das auf jedes Element angewendet wird.
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 mit dem Operator && und dem Operator || so viele Prädikate wie nötig angeben. 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() + " ");
}
}
}
// Output: 4 2 0
Eine where-Klausel enthält möglicherweise eine oder mehrere Methoden, die boolesche Werte zurückgeben. Im folgenden Beispiel wird mithilfe der where-Klausel eine Methode verwendet, um zu bestimmen, 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)
{
return i % 2 == 0;
}
}
//Output: 4 8 6 2 0
Hinweise
Die where-Klausel ist ein Filtermechanismus. Sie kann fast überall in einem Abfrageausdruck platziert werden, darf aber nicht die erste oder letzte Klausel sein. Eine where-Klausel kann entweder vor oder nach einer group-Klausel erscheinen, je nach dem, ob Sie die Quellelemente vor oder nach dem Gruppieren filtern müssen.
Ist ein angegebenes Prädikat nicht für die Elemente in der Datenquelle gültig, tritt ein Kompilierzeitfehler auf. Dies ist ein Vorteil der starken Typüberprüfung, die von LINQ bereitgestellt wird.
Während der Kompilierung wird das where-Schlüsselwort in einen Aufruf der Where-Standardabfrageoperator-Methode konvertiert.
Siehe auch
Konzepte
LINQ-Abfrageausdrücke (C#-Programmierhandbuch)