عبارت where

شما می‌توانید نتیجه پرس و جو را با استفاده از عبارت where فیلتر کنید. بعد از کلمه کلیدی where یک شرط (یا مجموعه‌ای از شروط) قرار می‌گیرد، هر عنصری که در نتیجه پرس و جو قرار می‌گیرد با این شرط مطابقت دارد. نکته بسیار مهمی که اهمیت دارد این است که برای نوشتن شرط می‌توانید از متدهایی که در کتابخانه کلاس Net Framework. قرار دارد استفاده نمایید. این درس به شما نشان می‌دهد که چگونه با استفاده از عبارت where نتیجه پرس و جو را فیلتر نمایید. با استفاده از عملگرهای مقایسه‌ای می‌توان مقدار یا خاصیتی از یک شیء را با یک مقدار دیگر مقایسه کرد. به عنوان مثال، قصد داریم عناصر یک آرایه عددی را که بزرگتر از 5 هستند انتخاب نماییم، پرس و جویی که می‌نویسیم به شکل زیر است :

int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

var greaterThanFive = from number in numbers
                      where number > 5
                      select number;

در مثال بالا شرط داخل عبارت where تعیین می‌کند فقط مقادیری از آرایه که بزرگتر از 5 باشند در نتیجه پرس و جو قرار گیرند. با استفاده از عملگرهای منطقی شرط‌های پیچیده‌تری را می‌توان نوشت :

var sixToTen = from number in numbers
               where number > 5 && number <= 10
               select number;

کوئری بالا مقادیری که بزرگتر از 5 و کوچکتر مساوی با 10 هستند در نتیجه پرس و جو قرار می‌دهد. اگر مجموعه‌ای از اشیاء با تعدادی خاصیت داشته باشید، می‌توان از خاصیت‌های آنها برای نوشتن شرط عبارت where استفاده کنید :

List<Person> people = GetPersonList();

var smiths = from person in people
             where person.LastName == "Smith"
             select person;

کوئری بالا اشخاصی که مقدار خاصیت LastName آن‌ها برابر Smith هست را در نتیجه پرس و جو قرار می‌دهد. همانطور که گفته شد می‌توان از متدهای .net برای نوشتن شرط استفاده کرد، به عنوان مثال قصد داریم تمامی اشخاصی که مقدار خاصیت lastname آن‌ها با حرف R شروع می‌شود را انتخاب کنیم، عبارت پرس وجو زیر این کار را انجام می‌دهد :

var startsWithR = from person in people
                  where person.LastName.StartsWith("R")
                  select person;

در کوئری بالا از متد ()StartsWith کلاس String استفاده شده است، این متد در صورتی که رشته با آرگومان ارسالی به این متد شروع شود true را بر می‌گرداند. متناوباً، می‌توان از متد توسعه یافته ()Where از فضای نامی System.Linq برای نوشتن شرط استفاده کرد. این متد یک پارامتر از نوع عبارات لامبدا می‌پذیرد، این عبارت لامبدا یک پارامتر دارد که عنصر پرس و جو شده در آن قرار می‌گیرد و بدنه آن شامل یک شرط است. خروجی این متد مجموعه‌ای از اشیاء است .

var greaterThanFive = numbers.Where ( number => number > 5 );

در بدنه عبارت لامبدا یک دستور شرطی ساده قرار دارد که بررسی می‌کند که آیا مقدار عدد بزرگتر از 5 است یا نه. در زیر مثالی دیگر را مشاهده می‌نمایید که اشخاصی که خصوصیت LastName آن‌ها با حرف R شروع می‌شود را در نتیجه پرس و جو قرار می‌دهد.

var startsWithR = people.Where( person => person.LastName.StartsWith("R") );

می‌توان از یکی از سربارگذاری های این متد که یک عبارت لامبدا با 2 پارامتر را قبول می‌کند نیز استفاده کنید. اولین پارامتر نماینده‌ی هر یکی از اشیاء مجموعه می‌باشد، و پارامتر دوم اندیس آن شیء در مجموعه را تعیین می‌کند. مثال زیر اشیایی از مجموعه را بر می‌گرداند که اندیس آنها در مجموعه زوج باشد .

var evenIndices = numbers.Where( (number, index) => index % 2 == 0 );

از متد ()Where می‌توان زمانی استفاده کرد که بخواهید یکی مجموعه را بر اساس یک شرط مشخص فیلتر کنید .