بند WHERE ( مرجع C# )

البند where يستخدم في تعبير الاستعلام لتحديد أي العناصر من مصدر البيانات سيعيد تعبير استعلام. وينطبق شرط منطقية (دالة التقييم) لكل عنصر مصدر (المشار إليه بواسطة متغير النطاق) وترجع تلك التي كان فيها الشرط المحدد صواب. تعبير الاستعلام الواحد قد يحتوي على بنود متعددة where وقد تحتوي الفقرة الواحدة على تعبيرات أصلية فرعية متعددة.

مثال

في المثال التالي البند where يصفي جميع الأرقام باستثناء تلك التي تكون أقل من خمسة. إذا قمت بإزالة بند where , فإن كل الأرقام من مصدر البيانات ستتم إعادتها. التعبير num < 5 هو المسند التي يتم تطبيقها على كل عنصر.

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

في بند where الواحد، يمكنك تحديد العديد من المسندات الضرورية باستخدام عوامل التشغيل &&و ||. في المثال التالي، يحدد الاستعلام اثنين من المسندات لتحديد الأرقام الزوجية فقط التي تكون أقل من خمسة.

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() + " ");
        }            
    }
}
// Output: 4 2 0

بند where قد يحتوي على أسلوب واحد أو أكثر تقوم بإرجاع قيم منطقية. في المثال التالي, البند where يستخدم أسلوب لتحديد ما إذا كانت القيمة الحالية متغير نطاق الصفحات الفردية أو الزوجية.

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

ملاحظات

البند where آلية التصفية. ويمكن وضعها في أي مكان تقريبا في تعبير الاستعلام، إلا أنه لا يمكن أن يكون الشرط الأول أو الأخير. البند where قد يظهر قبل أو بعد بند مجموعةاعتماداً على ما إذا كان لديك لتصفية عناصر المصدر قبل أو بعد تجميعها.

إذا كانت دالة محدد غير متاح للعناصر الموجودة في مصدر البيانات، فسوف يؤدي خطأ وقت التحويل البرمجي. هذه هي واحدة من فوائد التحقق من النوع القوي المقدم من LINQ.

في وقت التحويل برمجياً فأن الكلمة الأساسية where يتم تحويلها لاستدعاء أسلوب مشغل الاستعلامات القياسي Where .

راجع أيضًا:

المرجع

فقرة From ( مرجع #C )

جملة select (مرجع #C)

المبادئ

تصفية البيانات

LINQ استعلام التعبيرات (C# البرمجة الدليل)

موارد أخرى

استعلام الكلمات الأساسية ( مرجع C# )

الشروع في استخدام LINQ في C#‎