English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
عمود الفرز في LINQ يستخدم بعض المعايير المحددة لفرز سلسلة (مجموعة).
الجدول أدناه يعرض جميع عمود الفرز المتاحة في LINQ.
عمود الفرز | وصف |
---|---|
Where | يُعيد القيمة بناءً على الوظيفة الشرطية. |
OfType | يُعيد القيمة بناءً على النوع المحدد. ومع ذلك، يعتمد ذلك على قدرتها على التحويل إلى النوع المحدد. |
عمود Where (طريقة توسيع LINQ) يُطالب مجموعة بناءً على شرط معين ويُعيد مجموعة جديدة. يمكن تحديد المعيار كتعبير lambda أو كائن من نوع Func.
Whereيوجد للا扩展 طريقتين مكررتين. كلا الطريقتين تتلقى كائن من نوع Func. الطريقة الأولى تتطلب معرف <TSource،bool> كإدخال، والطريقة الثانية تتطلب معرف <TSource،int،bool> كإدخال، حيث يُستخدم int كفهرس:
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 لفرز الطلاب المراهقين من مجموعة الم داده (سلسلة). يستخدم تعبير 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; }
مختلف عن لغة الاستعلام، تحتاج إلى نقل كل تعبير 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() الموسع في استعلام LINQ الواحد عدة مرات.
var filteredResult = from s in studentList where s.Age > 12 where s.Age < 20 select s;
var filteredResult = studentList.Where(s => s.Age > 12).Where(s => s.Age < 20);
Where لتصفية المجموعة بناءً على معيار معين.
منها طريقتين موسعتين. يمكن استخدام الطريقة الموسعة الثانية لمعرفةIndexOf العنصر الحالي في المجموعة.
جملة الطريقة تحتاج إلى تعبير lambda الكامل الموجود في طريقة Where الموسعة، بينما جملة الاستعلام تحتاج فقط إلى جسم التعبير.
في استعلام LINQ الواحد، عدةWhereالطريقة الموسعة فعالة.