Megosztás a következőn keresztül:


where záradék (C# referencia)

A where záradék egy lekérdezési kifejezésben annak megadására szolgál, hogy az adatforrás mely elemei lesznek visszaadva a lekérdezési kifejezésben. Logikai feltételt (predikátumot) alkalmaz minden forráselemre (amelyre a tartományváltozó hivatkozik), és visszaadja azokat, amelyekre a megadott feltétel igaz. Egyetlen lekérdezési kifejezés több where záradékot is tartalmazhat, és egyetlen záradék több predikátumos alkifejezést is tartalmazhat.

1. példa

A következő példában a záradék az where ötnél kevesebb szám kivételével kiszűri az összes számot. Ha eltávolítja a záradékot, a where rendszer minden számot visszaad az adatforrásból. A kifejezés num < 5 az egyes elemekre alkalmazott predikátum.

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

2. példa

Egyetlen where záradékon belül annyi predikátumot adhat meg, amennyi szükséges a &> és || az operátorok használatával. A következő példában a lekérdezés két predikátumot ad meg, hogy csak az ötnél kisebb páros számokat válassza ki.

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

3. példa

A where záradék tartalmazhat egy vagy több metódust, amelyek logikai értékeket adnak vissza. A következő példában a where záradék egy metódussal határozza meg, hogy a tartományváltozó aktuális értéke páros vagy páratlan-e.

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

Megjegyzések

A where záradék egy szűrési mechanizmus. Szinte bárhol elhelyezhető egy lekérdezési kifejezésben, de nem lehet az első vagy az utolsó záradék. Egy where záradék a csoport záradéka előtt vagy után is megjelenhet attól függően, hogy a forráselemeket a csoportosítás előtt vagy után kell-e szűrni.

Ha egy megadott predikátum érvénytelen az adatforrás elemeire vonatkozóan, fordítási idő hibát fog eredményezni. Ez a LINQ által biztosított erős típusellenőrzés egyik előnye.

Fordításkor a rendszer a where kulcsszót a Where Standard Lekérdezéskezelő metódus hívásává alakítja.

Lásd még