where-Klausel (C#-Referenz)where clause (C# Reference)

Die where-Klausel wird in einem Abfrageausdruck verwendet, um anzugeben, welche Elemente aus der Datenquelle im Abfrageausdruck zurückgegeben werden.The where clause is used in a query expression to specify which elements from the data source will be returned in the query expression. Sie wendet eine boolesche Bedingung (Prädikat) auf jedes Quellelement an, auf das durch die Bereichsvariable verwiesen wird, und gibt die Elemente zurück, bei denen die angegebene Bedingung wahr ist.It applies a Boolean condition (predicate) to each source element (referenced by the range variable) and returns those for which the specified condition is true. Ein einzelner Abfrageausdruck enthält möglicherweise mehrere where-Klauseln, und eine einzelne Klausel kann mehrere Teilausdrücke des Prädikats enthalten.A single query expression may contain multiple where clauses and a single clause may contain multiple predicate subexpressions.

BeispielExample

Im folgenden Beispiel filtert die where-Klausel alle Zahlen mit Ausnahme derjenigen heraus, die niedriger als fünf sind.In the following example, the where clause filters out all numbers except those that are less than five. Wenn Sie die where-Klausel entfernen, werden alle Zahlen aus der Datenquelle zurückgegeben.If you remove the where clause, all numbers from the data source would be returned. Der Ausdruck num < 5 ist das Prädikat, das auf jedes Element angewendet wird.The expression num < 5 is the predicate that is applied to each element.

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

BeispielExample

Innerhalb einer einzelnen where-Klausel können Sie so viele Prädikate wie nötig angeben, indem Sie die Operatoren && und || verwenden.Within a single where clause, you can specify as many predicates as necessary by using the && and || operators. Im folgenden Beispiel gibt die Abfrage zwei Prädikate an, um nur die geraden Zahlen auszuwählen, die niedriger als fünf sind.In the following example, the query specifies two predicates in order to select only the even numbers that are less than five.

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

BeispielExample

Eine where-Klausel kann eine oder mehrere Methoden enthalten, die boolesche Werte zurückgeben.A where clause may contain one or more methods that return Boolean values. Im folgenden Beispiel verwendet die where-Klausel eine Methode, um zu bestimmen, ob der aktuelle Wert der Bereichsvariable gerade oder ungerade ist.In the following example, the where clause uses a method to determine whether the current value of the range variable is even or odd.

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

HinweiseRemarks

Die where-Klausel ist ein Filtermechanismus.The where clause is a filtering mechanism. Sie kann praktisch überall in einem Abfrageausdruck positioniert werden; sie kann allerdings nicht die erste oder letzte Klausel sein.It can be positioned almost anywhere in a query expression, except it cannot be the first or last clause. Eine where-Klausel kann entweder vor oder nach der group-Klausel angezeigt werden, abhängig davon, ob Sie die Quellelemente vor oder nach deren Gruppierung filtern müssen.A where clause may appear either before or after a group clause depending on whether you have to filter the source elements before or after they are grouped.

Wenn ein angegebenes Prädikat nicht für die Elemente in der Datenquelle gültig ist, tritt ein Kompilierzeitfehler auf.If a specified predicate is not valid for the elements in the data source, a compile-time error will result. Dies ist ein Vorteil der von LINQLINQ bereitgestellten starken Typprüfung.This is one benefit of the strong type-checking provided by LINQLINQ.

Zur Kompilierzeit wird das Schlüsselwort where in einen Aufruf der Standardabfrageoperator-Methode Where konvertiert.At compile time the where keyword is converted into a call to the Where Standard Query Operator method.

Siehe auchSee Also

Abfrageschlüsselwörter (LINQ)Query Keywords (LINQ)
from-Klauselfrom clause
select-Klauselselect clause
Filtern von DatenFiltering Data
LINQ-AbfrageausdrückeLINQ Query Expressions
Erste Schritte mit LINQ in C#Getting Started with LINQ in C#