English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

عمود الفرز Where في LINQ

عمود الفرز في LINQ يستخدم بعض المعايير المحددة لفرز سلسلة (مجموعة).

الجدول أدناه يعرض جميع عمود الفرز المتاحة في LINQ.

عمود الفرزوصف
Where

يُعيد القيمة بناءً على الوظيفة الشرطية.

OfType

يُعيد القيمة بناءً على النوع المحدد. ومع ذلك، يعتمد ذلك على قدرتها على التحويل إلى النوع المحدد.

Where

عمود Where (طريقة توسيع LINQ) يُطالب مجموعة بناءً على شرط معين ويُعيد مجموعة جديدة. يمكن تحديد المعيار كتعبير lambda أو كائن من نوع Func.

Whereيوجد للا扩展 طريقتين مكررتين. كلا الطريقتين تتلقى كائن من نوع Func. الطريقة الأولى تتطلب معرف <TSource،bool> كإدخال، والطريقة الثانية تتطلب معرف <TSource،int،bool> كإدخال، حيث يُستخدم int كفهرس:

مقالة Where مكررة:
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, 
                                                  Func<TSource, bool> predicate);
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, 
                                                  Func<TSource, int, bool> predicate);

جملة Where في لغة الاستعلام

مثال على استعلام Where يستخدم عمود Where لفرز الطلاب المراهقين من مجموعة الم داده (سلسلة). يستخدم تعبير lambda كوظيفة شرط.

IList<Student> studentList = new List<Student>() { 
        new Student() { StudentID = 1, StudentName = "John", Age = 13} ,
        new Student() { StudentID = 2, StudentName = "Moin", Age = 21 } ,
        new Student() { StudentID = 3, StudentName = "Bill", Age = 18 } ,
        new Student() { StudentID = 4, StudentName = "Ram" , Age = 20} ,
        new Student() { StudentID = 5, StudentName = "Ron" , Age = 15 } 
    });
var filteredResult = from s in studentList
                    where s.Age > 12 && s.Age < 20
                    select s.StudentName;
Dim studentList = New List(Of Student) From {
        New Student() With {.StudentID = 1, .StudentName = "John", .Age = 13},
        New Student() With {.StudentID = 2, .StudentName = "Moin", .Age = 21},
        New Student() With {.StudentID = 3, .StudentName = "Bill", .Age = 18},
        New Student() With {.StudentID = 4, .StudentName = "Ram", .Age = 20},
        New Student() With {.StudentID = 5, .StudentName = "Ron", .Age = 15}
    }
Dim filteredResult = From s In studentList
                     Where s.Age > 12 And s.Age < 20
                     Select s.StudentName

في هذا المثال، سيشمل filteredResult الطلاب التاليين بعد تنفيذ الاستعلام.

John
Bill
Ron

في جسم التعبير lambda في الاستعلام السابق، s.Age > 12 && s.Age < 20 كوظيفة تصفية لكل طالب في مجموعة التقييم.Func<TSource, bool>

بالإضافة إلى ذلك، يمكنك أيضًا استخدام التوليد Func مع طريقة مجهولة النص، كحالة من الحالات التالية للوظيفة الموصوفة (النتيجة متطابقة):

Func<Student,bool> isTeenAger = delegate(Student s) {}} 
                                    return s.Age > 12 && s.Age < 20; 
                                });
var filteredResult = from s in studentList
                     where isTeenAger(s)
                     select s;

يمكنك أيضًا التعبير عن أي طريقة تم تطويرها تتوافق مع شكل Func كمساهم في Where() باستخدام الطريقة المعدلة.

public static void Main()
{
    var filteredResult = from s in studentList
                         where isTeenAger(s)
                         select s;
}
public static bool IsTeenAger(Student stud)
{
    return stud.Age > 12 && stud.Age < 20;  
}

طريقة توسيع where

مختلف عن لغة الاستعلام، تحتاج إلى نقل كل تعبير lambda كوظيفة مبدأ، وليس فقط جسم التعبير في لغة LINQ.

var filteredResult = studentList.Where(s => s.Age > 12 && s.Age < 20);
Dim filteredResult = studentList.Where(Function(s) s.Age > 12 And s.Age < 20)

كما ذكرت سابقًا،Whereلدي الطريقة التوسيعية ثاني طريقة تحميل، التي تشمل هوية العنصر الحالي في المجموعة. إذا لزم الأمر، يمكنك استخدام هذا المؤشر في المنطق.

في هذا المثال، يتم استخدام جملة Where لفرز العناصر الصحيحة من المجموعة، ويعود فقط العناصر الأصلية. تذكر أن البداية من الصفر.

IList<Student> studentList = new List<Student>() { 
        new Student() { StudentID = 1, StudentName = "John", Age = 18 } ,
        new Student() { StudentID = 2, StudentName = "Steve", Age = 15 } ,
        new Student() { StudentID = 3, StudentName = "Bill", Age = 25 } ,
        new Student() { StudentID = 4, StudentName = "Ram", Age = 20 } ,
        new Student() { StudentID = 5, StudentName = "Ron", Age = 19 } 
    });
var filteredResult = studentList.Where((s, i) => { 
            if (i % 2 == 0) // إذا كان الرقم زوجيًا
                return true;
                
        return false;
    });
foreach (var std in filteredResult)
        Console.WriteLine(std.StudentName);

 

الإخراج:
John
Bill
Ron

جملة where متعددة

يمكنك إعادة الاتصال بمتغير Where() الموسع في استعلام LINQ الواحد عدة مرات.

مثال: جملة الاستعلام في Where متعددة في C#
var filteredResult = from s in studentList
                        where s.Age > 12                    
                        where s.Age < 20                    
                        select s;
مثال: جملة الطريقة في Where متعددة في C#
var filteredResult = studentList.Where(s => s.Age > 12).Where(s => s.Age < 20);

  نقاط يجب تذكرها

  1. Where لتصفية المجموعة بناءً على معيار معين.

  2. منها طريقتين موسعتين. يمكن استخدام الطريقة الموسعة الثانية لمعرفةIndexOf العنصر الحالي في المجموعة.

  3. جملة الطريقة تحتاج إلى تعبير lambda الكامل الموجود في طريقة Where الموسعة، بينما جملة الاستعلام تحتاج فقط إلى جسم التعبير.

  4. في استعلام LINQ الواحد، عدةWhereالطريقة الموسعة فعالة.