عملگر فیلتر گذاری Where
در این بخش عملگر فیلتر گذاری Where در LINQ را بررسی خواهیم کرد. عملگرهای فیلتر گذاری به منظور فیلتر کردن داده ها بر اساس شروط داده شده استفاده می شود. در جدول زیر می توانید کل عملگرهای فیلتر گذاری موجود در زبان LINQ را مشاهده کنید.
عملگر | توضیحات |
Where | بر اساس شرط مشخص شده مجموعه از داده ها را باز میگرداند. |
OfType | بر اساس نوع داده مشخص شده مجموعه از داده ها را باز میگرداند. |
عملگر Where
عملگر Where بر اساس شرط مشخص شده داده ها را فیلتر کرده و نتیجه را به صورت یک مجموعه جدید باز میگرداند. برای مشخص کردن شرط می توانیم از عبارت لامبدا یا Func استفاده کنیم.
متد افزودنی Where دو overload دارد که هر دو آن ها یک Func به عنوان ورودی دارند. امضای مربوط به این متد افزودنی:
1 2 3 4 5 | 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 به منظور پیدا کرد دانش آموزان نوجوان استفاده می کند. در این کوئری از عبارت لامبدا برای مشخص کردن شرط انتخاب استفاده شده است.
1 2 3 4 5 6 7 8 9 10 11 | 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; |
زمانی که مثال فوق را اجرا کنید، خروجی زیر را تولید خواهد کرد:
1 2 3 | John Bill Ron |
در مثال فوق عبارت لامبدا s.Age > 12 && s.Age < 20 به عنوان Func
1 2 3 4 5 6 7 | 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; |
همچنین می توانیم از یک متد که ورودی و خروجی آن با ورودی و خروجی Fun
1 2 3 4 5 6 7 8 9 10 11 | 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 در سینتکس متد
در نمونه زیر می توانید چگونگی استفاده از این متد را مشاهده کنید:
1 | var filteredResult = studentList.Where(s => s.Age > 12 && s.Age < 20); |
همانطور که در بالا گفته شد، متد Where دو overload دارد که یکی از آن ها اندیس آیتم جاری را نیز به ما می دهد. برای مثال در نمونه زیر ما از این overload استفاده کرده ایم تا فقط عناصری که اندیس زوج دارند را انتخاب کنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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) // if it is even element return true; return false; }); foreach (var std in filteredResult) Console.WriteLine(std.StudentName); |
خروجی مثال فوق:
1 2 3 | John Bill Ron |
هیچ نظری ثبت نشده است