خوش آمدید.
در این ویدیو، می‌خوام به شما نشون بدم که چطور می‌تونید آیتم‌ها رو بر اساس یک شرط **فیلتر** کنید.
و به همین دلیل از **LINQ** استفاده خواهیم کرد.
پس در اینجا بالا می‌تونید ببینید که **Generics** رو دارید.
یعنی **System.Collections.Generic**. این به ما اجازه می‌ده که اصلاً از **List**ها استفاده کنیم.
و بعد **LINQ** هست که به ما اجازه می‌ده از **List**ها به روش کارآمدتر، یا به طور کلی از داده‌ها به روش بسیار کارآمد استفاده کنیم.
و من به شما نشون می‌دم که چطور کار می‌کنه.
پس من این **List** از آیتم‌ها رو اینجا دارم که شامل موز، سیب، گیلاس و توت هست.
و حالا چیزی که می‌خوام بفهمم، تمام محصولاتی هستن که ارزان قیمت هستن.
پس هر چیزی که می‌تونم زیر یک دلار بگیرم، مثلاً.
خب چطور باید این کار رو انجام بدم؟
خب قضیه اینه که می‌تونم از چیزی به نام **products.Where** استفاده کنم.
پس این کلمه کلیدی **Where** وجود داره که یک توالی از مقادیر رو بر اساس یک **Predicate** فیلتر می‌کنه.
پس دوباره این موضوع **Predicate** رو داریم.
خب قضیه اینه که این **Predicate** همون چیزی خواهد بود که قبلاً دیده‌ایم، که در اون فقط یک **Lambda Expression** پاس می‌دیم.
پس بذارید نشونتون بدم که این چکار می‌کنه یا چطور کار می‌کنه.
پس می‌تونم فقط بگم **p** و بعد **lambda**: **p** تبدیل می‌شود به **p.Price** بزرگتر یا کوچکتر از... من می‌گم کوچکتر از **1.0**.
و این اینجا یک **IEnumerable** رو **return** می‌کنه که می‌تونیم اون رو به یک **List** تبدیل کنیم.
پس می‌تونم جلو برم و اون رو به یک **List** به این شکل تبدیل کنم، بدون این **foreach**.
پس این به خودی خود یک عبارت معتبره.
با این حال، ما هنوز اون رو در **List** ذخیره نکردیم.
پس بیایید یک **List** دیگه اینجا اضافه کنیم.
پس قراره اون رو یک **List** از **Product**ها کنیم که من این رو **cheapProducts** (محصولات ارزان) می‌نامم.
و من قراره هر چیزی که نتیجه این خط هست رو ذخیره کنم. پس اتفاقات زیادی در این خط در حال رخ دادن هست.
پس بیایید اون رو قدم به قدم بشکافیم.
پس داریم می‌گیم: **Product**ها رو به من بده **Where** (جایی که) این شرط برآورده می‌شه، اساساً جایی که این شرط برآورده می‌شه.
پس این **p** اینجا یک **Product** هست.
پس می‌تونید نشانگر رو روش نگه دارید و می‌تونید ببینید که حتی می‌گه **Product p**.
پس این **Where clause** (عبارت Where) به ما یک **Product** خواهد داد چون داریم از اون روی **Product List** استفاده می‌کنیم، اوکی. پس **products** یک **List** از آیتم‌های **Product** مجزا هست.
پس اگه دارم از این **Where clause** استفاده می‌کنم و از یک **Predicate** استفاده می‌کنم، این **Where clause** به عنوان یک پارامتر، خود **Product** رو به من خواهد داد. پس **p** حالا همون **Product** هست.
بعد دارم می‌گم: اوکی، **p**هایی رو به من بده که **p.Price**...
پس **p.Price**.
و چرا **Price** رو دریافت می‌کنیم؟ خب چون **p**. پس **Product class** این **Price property** رو داره. این یکی همینجاست، این **Price property**.
و اینجا می‌بینید که قیمت‌های متفاوتی برای هر آیتم داریم.
و من فقط دارم می‌گم: **p**هایی رو به من بده که **Price**شون کمتر از **1.0** هست.
حالا این به خودی خود یک **List** رو **return** نخواهد کرد.
اون یک چیزی به نام **IEnumerable** رو **return** خواهد کرد.
**IEnumerable**ها چیزی برای یک نقطه زمانی بعدی هستن، اما کاری که به ما اجازه می‌ده انجام بدیم اینه که به ما اجازه می‌ده با این متد به نام **ToList** از اون یک **List** بسازیم.
پس **IEnumerable**ها یک روش حتی انعطاف‌پذیرتر، کلی‌تر از **List**ها هستن.
پس انواع مختلفی از **List**ها وجود داره.
ما **Arrays** رو دیده‌ایم، **List**ها رو دیده‌ایم. انواع دیگری از **Collections** وجود داره.
اونها **List** نامیده نمی‌شن، اما همه اونها تا حدی **Collections** نامیده می‌شن. درسته. پس ما انسان‌ها اونها رو **List** می‌نامیم. اما در کدنویسی، اونها **Collections** نامیده می‌شن.
پس انواع مختلفی از **Collections** وجود داره. **List**ها و **Arrays** فقط دو نوع از اونها هستن.
**IEnumerable**ها یک نوع از **List** هستن که حتی کلی‌تره، که به اصطلاح توانایی بیشتری داره.
پس یک **List** از نوع **A** هست؟
خب، یکی از انواع **IEnumerable**ها واضحاً کمی پیچیده‌تر از اینه چون **IEnumerable** یک **interface** هست و الی آخر. اما این چیزیه که وقتی واقعاً برنامه‌نویسی شی‌ءگرا، بخش سوم، رو درک کردیم، پوشش خواهیم داد، اوکی.
پس در این مرحله کاری که می‌تونیم انجام بدیم، اینه که می‌تونیم فقط بگیم، اوکی، پس چیزی که داری **return** می‌کنی یک **IEnumerable**ِ هر چیزی هست. من نمی‌دونم اون چیه، اما می‌دونم که می‌تونم **IEnumerable**ها رو به **List**ها تبدیل کنم و می‌تونم اونها رو داخل **List** **objects** ذخیره کنم. پس داخل این متغیر **cheapProducts** که از نوع **List** هست.
چون این اینجا یک **List** از **Product** هست چون ما اون رو به یک **List** تبدیل کردیم بعد از اینکه یک **Enumerable** از نوع **Product** بود. پس حالا از اون یک **List** از نوع **Product** ساختیم و حالا این **cheapProducts**...
**List** حالا تمام محصولاتی رو که ارزان‌تر از قیمت داده شده هستن، شامل خواهد شد.
پس حالا کاری که می‌تونیم انجام بدیم اینه که می‌تونیم فقط بگیم، تمام **cheapProducts** رو به من بده و اونها رو چاپ کن.
پس کاری که قراره انجام بدم اینه که این **foreach loop** رو تغییر می‌دم، جایی که می‌گم: "محصولات موجود با قیمت کمتر از 1 دلار".
و اینجا، به جای اینکه از طریق **products list** برم، قراره از طریق **cheapProducts list** برم، که این **List** جدیده که ما با **Where clause** فیلتر کردیم.
و حالا بذارید دوباره این رو اجرا کنم و خواهیم دید که **cheap products** سیب با 0.8 دلار و موز با 0.3 دلار هستن، و این تقریباً یک بخش از **LINQ** هست.
پس این چیز اینجا، این **LINQ** اینجا، اگه وارد... راستی، دیدن این بسیار جالبه.
پس اگه وارد **directives** خودتون بشید، می‌تونید اینجا کلیک کنید. وقتی در بالای فایل خودتون هستید، می‌تونید روی هر کدوم از اونها کلیک کنید و به این فایل تولید شده خودکار به نام **ListApp.global.using.drugs** می‌رسید.
پس چیزی که اینجا می‌تونید ببینید اینه که ما داریم از **namespace** یا **directive** به نام **System** استفاده می‌کنیم. ما داریم از **Collections.Generic** استفاده می‌کنیم و داریم از **LINQ** استفاده می‌کنیم. در حال حاضر ما از **HttpClient**, **threading**, **tasks**, **input/output** استفاده نمی‌کنیم. ما از هیچ کدوم از اونها استفاده نمی‌کنیم. ما فقط داریم از این سه تا استفاده می‌کنیم: **LINQ**, **Collections.Generic** و **System**؛ **System** چیزیه که برای هر چیزی بهش نیاز داریم، درسته؟ بدون **System** نمی‌تونیم کاری انجام بدیم.
این **Collections.Generic** به ما اجازه می‌ده که از **List**های خودمون استفاده کنیم.
اوکی.
پس این **List** اینجا بخشی از **Collections.Generic** هست. پس می‌تونید اون رو اینجا ببینید **System.Collections.Generic**.
حالا این **Where clause** از کجا میاد؟
خب اگه روی اون کلیک کنید، می‌فهمید که زیر **namespace** **System.Linq** قرار داره. پس **LINQ** این چیزها به نام **IEnumerable**ها رو نگه می‌داره که این کلمه کلیدی رو قبلاً دیده‌ایم. درسته؟ فقط یک دقیقه یا دو دقیقه پیش.
و در اونجا این **Where clause** رو دارید. اینجاست که این متد **Where** از اونجا میاد.
اما اتفاقات زیادی اینجا در حال رخ دادنه. انگار که وای، چه خبره. خیلی چیزها.
خب قضیه اینه که نگرانش نباشید. در پایان دوره، همه اون چیزها رو خواهید فهمید، اوکی؟ اما در حال حاضر تنها چیزی که باید بدونیم اینه که چطور از اون استفاده کنیم.
بعداً، حتی بیشتر خواهیم فهمید که زیر کاپوت چطوره، اما هنوز به اونجا نرسیدیم.
اوکی، پس به طور کلی، حالا می‌فهمید که در کجا قرار داریم.
ما داریم برای اولین بار از **LINQ** استفاده می‌کنیم، و می‌دونم کمی زوده، اما **LINQ** رو بعداً با جزئیات بیشتری پوشش خواهیم داد چون این واقعاً وقتی با **Databases** کار می‌کنید، مهمه.
واقعاً مهمه، یک ابزار فوق‌العاده مفید.
اوکی.
اما فعلاً می‌دونید چطور می‌تونید **List**های خودتون رو حتی با آیتم‌های پیچیده فیلتر کنید، درسته؟ نه فقط چیزی ساده مثل **Int**ها یا **Double**ها یا حتی **String**ها، بلکه با انواع داده واقعی که خودمون ایجاد کردیم با چندین **Property** از انواع داده متفاوت.
اوکی، پس برای اینکه تا اینجا پیش رفتید، تبریک می‌گم.
و می‌گم شما رو در ویدیوی بعدی می‌بینم.