where tümcesi (C# Başvurusu)

where yan tümcesi, sorgu ifadesinde veri kaynağından hangi öğelerin döndürüleceğini belirtmek için bir sorgu ifadesinde kullanılır. Her kaynak öğeye (aralık değişkeni tarafından başvurulan) bir Boole koşulu (koşul) uygular ve belirtilen koşulun true olduğu durumları döndürür. Tek bir sorgu ifadesi birden çok where yan tümce içerebilir ve tek bir yan tümce birden çok koşul alt ifadesi içerebilir.

Örnek 1

Aşağıdaki örnekte yan tümcesi, where beşten küçük olanlar dışında tüm sayıları filtreler. Yan tümcesini where kaldırırsanız, veri kaynağındaki tüm sayılar döndürülür. İfade num < 5 , her öğeye uygulanan koşuldur.

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

Örnek 2

Tek where bir yan tümce içinde, ve || işleçlerini kullanarak && gerektiği kadar koşul belirtebilirsiniz. Aşağıdaki örnekte sorgu, yalnızca beşten küçük çift sayıları seçmek için iki koşul belirtir.

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

Örnek 3

Yan where tümcesi Boole değerleri döndüren bir veya daha fazla yöntem içerebilir. Aşağıdaki örnekte yan tümcesi, where aralık değişkeninin geçerli değerinin çift mi yoksa tek mi olduğunu belirlemek için bir yöntem kullanır.

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

Açıklamalar

where yan tümcesi bir filtreleme mekanizmasıdır. Sorgu ifadesinde hemen her yere konumlandırılabilir, ancak ilk veya son yan tümcesi olamaz. Bir where yan tümce, kaynak öğeleri gruplandırılmadan önce veya sonra filtrelemeniz gerekip gerekmediğine bağlı olarak grup yan tümcesinin öncesinde veya sonrasında görüntülenebilir.

Belirtilen bir koşul veri kaynağındaki öğeler için geçerli değilse, derleme zamanı hatası oluşur. Bu, LINQ tarafından sağlanan güçlü tür denetiminin avantajlarından biridir.

Derleme zamanında where anahtar sözcüğü Standart Sorgu İşleci yöntemine yapılan bir çağrıya Where dönüştürülür.

Ayrıca bkz.