Sdílet prostřednictvím


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

where Klauzule ve výrazu dotazu slouží k určení, které prvky ze zdroje dat, bude vrácena ve výrazu dotazu.Platí logickou podmínkou (predikát) každému prvku zdroj (odkazuje proměnná oblast) a vrátí ty, pro které je zadaná podmínka pravdivá.Jediného dotazu výraz může obsahovat více where doložky a jednu klauzuli může obsahovat více podvýrazy predikátu.

Příklad

V následujícím příkladu where klauzule filtruje všechna čísla kromě těch, které jsou menší než pět.Pokud odeberete where klauzule by vrácena všechna čísla ze zdroje dat.Výraz num < 5 je predikát, který je použit na 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

V jednom where doložku, podle potřeby můžete zadat tolik predikáty pomocí & & a | operátory.Dotaz v následujícím příkladu určuje dvě predikáty Chcete-li 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

A where klauzule mohou obsahovat jednu nebo více metod, které vrátit logické hodnoty.V následujícím příkladu where klauzule používá metody k určení, zda je aktuální hodnotu proměnné rozsah 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)
    {
        return i % 2 == 0;
    }    
}
//Output: 4 8 6 2 0

Poznámky

where Mechanismu filtrování je klauzule.Je možné umístit téměř kdekoli ve výrazu dotazu kromě nemůže být klauzule první nebo poslední.A where klauzule se může zobrazit před nebo za skupiny klauzule v závislosti na tom, zda máte filtrovat zdroje prvky před nebo po jsou seskupeny.

Pokud zadaný predikátu není platná pro prvky ve zdroji dat, Chyba při kompilaci nebude.To je výhodou silný typ kontrola podle LINQ.

V době kompilace where klíčové slovo je převeden na volání Where metoda standardní operátor dotazu.

Viz také

Referenční dokumentace

from clause (Referenční dokumentace jazyka C#)

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

Koncepty

Filtrování dat

LINQ – výrazy dotazů (Průvodce programováním v C#)

Další zdroje

Klíčová slova dotazu (Referenční dokumentace jazyka C#)

Začínáme s dotazy LINQ v jazyce C#