Sdílet prostřednictvím


where – klauzule (Referenční dokumentace jazyka C#)

Klauzule where se používá ve výrazu dotazu k určení prvků ze zdroje dat, které se vrátí ve výrazu dotazu. Použije logickou podmínku (predikát) pro každý zdrojový prvek (odkazovaný proměnnou rozsahu) a vrátí podmínky, pro které je zadaná podmínka pravdivá. Jeden výraz dotazu může obsahovat více where klauzulí a jedna klauzule může obsahovat více dílčích výrazů predikátu.

Příklad 1

V následujícím příkladu where klauzule vyfiltruje všechna čísla s výjimkou těch, které jsou menší než pět. Pokud klauzuli where odeberete, vrátí se všechna čísla ze zdroje dat. Výraz num < 5 je predikát použitý pro každý prvek.

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

Příklad 2

V rámci jedné where klauzule můžete zadat libovolný počet predikátů pomocí & operátorů.|| V následujícím příkladu dotaz určuje dva predikáty, aby bylo možné vybrat pouze sudá čísla, která jsou menší než pět.

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

Příklad 3

where Klauzule může obsahovat jednu nebo více metod, které vracejí logické hodnoty. V následujícím příkladu where klauzule používá metodu k určení, zda aktuální hodnota proměnné rozsahu je sudá nebo lichá.

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

Poznámky

Klauzule where je mechanismus filtrování. Může být umístěn téměř kdekoli ve výrazu dotazu, s výjimkou toho, že nemůže být první nebo poslední klauzule. where Klauzule se může zobrazit buď před, nebo za klauzulí skupiny v závislosti na tom, jestli je nutné filtrovat zdrojové elementy před nebo po jejich seskupení.

Pokud zadaný predikát není platný pro prvky ve zdroji dat, dojde k chybě v době kompilace. Jedná se o jednu výhodu silné kontroly typů, kterou poskytuje LINQ.

V době where kompilace se klíčové slovo převede na volání Where metody Standardní operátor dotazu.

Viz také