Klauzula where (odwołanie w C#)where clause (C# Reference)

where Klauzula jest używana w wyrażeniu zapytania, aby określić, które elementy ze źródła danych będą zwracane w wyrażeniu zapytania.The where clause is used in a query expression to specify which elements from the data source will be returned in the query expression. Stosuje warunek logiczny (predykat) do każdego elementu źródłowego (do którego odwołuje się zmienna zakresu) i zwraca te, dla których określony warunek ma wartość true.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. Pojedyncze wyrażenie zapytania może zawierać wiele where klauzul, a pojedyncza klauzula może zawierać wiele podwyrażeń predykatu.A single query expression may contain multiple where clauses and a single clause may contain multiple predicate subexpressions.

PrzykładExample

W poniższym przykładzie where klauzula filtruje wszystkie liczby z wyjątkiem tych, które są mniejsze niż pięć.In the following example, the where clause filters out all numbers except those that are less than five. Usunięcie where klauzuli spowoduje zwrócenie wszystkich liczb ze źródła danych.If you remove the where clause, all numbers from the data source would be returned. Wyrażenie num < 5 jest predykatem, który jest stosowany do każdego elementu.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

PrzykładExample

W obrębie jednej where klauzuli można określić dowolną liczbę predykatów, && używając operatorów i | .Within a single where clause, you can specify as many predicates as necessary by using the && and || operators. W poniższym przykładzie zapytanie określa dwa predykaty w celu wybrania tylko liczb parzystych mniejszych niż pięć.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

PrzykładExample

where Klauzula może zawierać jedną lub więcej metod, które zwracają wartości logiczne.A where clause may contain one or more methods that return Boolean values. W poniższym przykładzie where klauzula używa metody, aby określić, czy bieżąca wartość zmiennej zakresu jest parzysta czy nieparzysta.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

UwagiRemarks

where Klauzula jest mechanizmem filtrowania.The where clause is a filtering mechanism. Można ją umieścić niemal w dowolnym miejscu w wyrażeniu zapytania, z wyjątkiem sytuacji, w której nie może być pierwszą lub ostatnią klauzulą.It can be positioned almost anywhere in a query expression, except it cannot be the first or last clause. Klauzula może pojawić się przed lub po klauzuli Group w zależności od tego, czy konieczne jest Filtrowanie elementów źródłowych przed lub po zgrupowaniu. whereA 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.

Jeśli określony predykat jest nieprawidłowy dla elementów w źródle danych, zostanie zwrócony błąd czasu kompilacji.If a specified predicate is not valid for the elements in the data source, a compile-time error will result. Jest to jedna korzyść dla ścisłego sprawdzania typu zapewnianego przez LINQLINQ.This is one benefit of the strong type-checking provided by LINQLINQ.

W czasie where kompilacji słowo kluczowe jest konwertowane na wywołanie Where metody standardowego operatora zapytań.At compile time the where keyword is converted into a call to the Where Standard Query Operator method.

Zobacz takżeSee also