در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آموزش لینک (LINQ) صفر تا صد در دات نت قسمت 5 : عملگرهای استاندارد

در ادامه سری مقالات آموزش LINQ به ادامه بررسی عملگرهای استاندارد LINQ خواهیم پرداخت. در بخش چهارم درباره برخی از این عملگرها صحبت کردیم. عملگرهایی که در بخش پنجم مورد بررسی قرار خواهند گرفت به شرح زیر می باشند:

  1. عملگر های Quantifier
  2. عملگر های Projection
  3. عملگر های Partitioning

عملگر های Quantifier

زمانی که تعدادی یا کل المان های موجود در مجموعه، در شرایط تعیین شده صدق کنند این عملگرها مقدار Boolean را بر می گردانند. عملگر های این بخش عبارتند از:

عملگر All

این عملگر زمانی مقدار true بر می گرداند که تمامی اعضای مجموعه در شرایط تعیین شده صدق کنند. به مثال زیر توجه کنید:

string[] strArray1 = { "a", "b", "d", "t", "l", "o" };

string[] strArray2 = { "a", "a", "a", "a", "a", "a" };

bool flag1 = strArray1.All(n => n.Equals("a"));
bool flag2 = strArray1.All(n => n.Equals("a"));

Console.WriteLine(flag1);
Console.WriteLine(flag2);

کد بالا مقادیر false و true را به ترتیب چاپ می کند. زیرا لیست اول همه عناصر مساوی کاراکتر a نیستند، ولی لیست دوم همه عناصر برابر کاراکتر a هستند.



عملگر Any

این عملگر زمانی مقدار true بر می گرداند که حداقل یکی از المان های مجموعه دارای شرایط تعیین شده باشد. این عملگر به دو صورت به کار گرفته می شود:
  1. استفاده بدون پارامتر ورودی که تعیین می کند لیست هیچ عضوی دارد یا خیر.
  2. استفاده با پارامتر که تعیین می کند حداقل یکی از المان های لیست دارای شرایط تعیین شده می باشد یا خیر:

string[] strArray = { "a", "b", "d", "t", "l", "o" };

bool flag1 = strArray.Any(n=>n.Equals("p"));
bool flag2 = strArray.Any(n=>n.Equals("l"));
bool flag3 = strArray.Any();

Console.WriteLine(flag1);
Console.WriteLine(flag2);

در بالا خروجی ابتدا false، سپس true و در آخر true می باشد.

عملگر Contains

این عملگر تعیین می کند که لیست دارای عضوی برابر با عضو تعیین شده می باشد یا خیر. این عملگر به جای یک شرط برای پارامتر ورودی، یک مقدار از نوع المان های لیست می گیرد. به مثال زیر توجه کنید:

string[] strArray = { "a", "b", "d", "t", "l", "o" };

bool flag1 = strArray.Contains("b");

Console.WriteLine(flag1); 

کد بالا مقدار True را برای خروجی چاپ می کند. این عملگر یک یک پارامتر از نوع IEqualityComarer نیز می گیرد که جهت مقایسه المان ها مورد استفاده قرار می گیرد.

عملگر های Projection

عملگر های این بخش برای تعیین نوع خروجی و تبدیل آن به نوع مورد نظر استفاده می شوند. از عملگر Select تا این لحظه چندین بار استفاده کردیم و با آن آشنایی داریم، اما عملگر SelectMany! از این عملگر برای استفاده چندین from در یک query استفاده می شود. به مثال زیر دقت کنید (به کلاس Person یک آرایه با نام Friends از نوع string اضافه شده است)

List persons = new List()
{
    new Person() { FirstName = "Ali", LastName = "Jamali", Age = 42, Friends = new string[] { "Hosein","Reza"} },
    new Person() { FirstName = "Hosein", LastName = "Ahmadi", Age = 23,Friends = new string[] { "Mohammad","Nima"} },
    new Person() { FirstName = "Mohamamd", LastName = "Sadeghi", Age = 17,Friends = new string[] { "Reza","Nima"} },
    new Person() { FirstName = "Reza", LastName = "Jamali", Age = 24,Friends = new string[] { "Hosein","Mohammad"} },
    new Person() { FirstName = "Nima", LastName = "Karami", Age = 18,Friends = new string[] { "Reza","Hosein"} }
};

var query1 = from p1 in persons
                  from p2 in p1.Friends
                  where p1.Age > 20
                  select p2;

var query2 = persons.Where(n => n.Age > 20).SelectMany(friend => friend.Friends);

query2.ToList().ForEach(n => Console.WriteLine(n));

هر دو کوئری نوشته شده در بالا، یک کار را انجام می دهد. در کوئری بالا، ابتدا تمام اشخاصی که سنشان بالای 20 سال است انتخاب شده و سپس لیست دوستان آنها به صورت یک مجموعه آرایه قرار داده شده است. یکی از مهمترین کاربرد های SelectMany زمانی است که شما می خواهید لیستی را که داخل هر یک از المان های نتیجه کوئری قرار دارد با یکدیگر Merge کنید.

عملگر های Partitioning

از این عملگر ها برای تقسیم بندی خروجی کوئری استفاده می شود. عملگر های این دسته عبارتند از:

عمگر Skip

با استفاده از این عملگر می توان تعداد رکورد دلخواه در ابتدای نتیجه کوئری را در نظر نگرفت. مثال:

int[] numbers = { 4, 6, 9, 3, 1, 2, 7, 5, 10, 8, 21, 7 };
var query = numbers.Skip(2);

query.ToList().ForEach(n => Console.WriteLine(n));

در خروجی بالا، دو المان ابتدایی کوئری در نظر گرفته نشده و المان سوم خروجی کوئری بر روی خروجی ظاهر می گردد.

SkipWhile

این عملگر المان ها را تا زمانی که شرط تعیین شده بر قرار باشد در خروجی در نظر نمی گیرد:

int[] numbers = { 4, 6, 9, 3, 1, 2, 7, 5, 10, 8, 21, 7 };
var query = numbers.OrderBy(n => n).SkipWhile(n => n < 10);

query.ToList().ForEach(n => Console.WriteLine(n));

در کد بالا ابتدا لیست به ترتیب صعودی مرتب شده و سپس اعداد تا زمانی که کوچکتر از 10 باشند در خروجی در نظر گرفته نمی شوند و اعداد 10، 8، 21 و 7 در خروجی چاپ خواهند شد.

عملگر های Take و TakeWhile

این عملگر ها عکس عملگر های Skip و SkipWhile عمل میکنند. یعنی المان های تا محل تعیین شده را بر می گردانند. مثال:

int[] numbers = { 4, 6, 9, 3, 1, 2, 7, 5, 10, 8, 21, 7 };
var query = numbers.Take(2);

query.ToList().ForEach(n => Console.WriteLine(n));

کد بالا 2 المان ابتدای لیست را بر می گرداند.


nt[] numbers = { 4, 6, 9, 3, 1, 2, 7, 5, 10, 8, 21, 7 };
var query = numbers.OrderBy(n => n).TakeWhile(n => n < 10);

query.ToList().ForEach(n => Console.WriteLine(n));

کد بالا ابتدا لیست را مرتب کرده و تا زمانی که اعداد کوچکتر از 10 باشند در خروجی نمایش داده می شوند.

در این بخش با تعداد دیگری از عملگر های استاندارد LINQ آشنا شدیم. در بخش بعدی با عملگر های Join، عملگر های Grouping، عملگر های Generation، عملگر های Equality و عملگر های Element آشنا خواهیم شد.
#آموزش_linq #عملگرهای_linq
عنوان
1 آموزش لینک (LINQ) صفر تا صد در دات نت قسمت 1 : مقدمات رایگان
2 آموزش لینک (LINQ) صفر تا صد در دات نت قسمت 2 : پرکاربردترین ها رایگان
3 آموزش لینک (LINQ) صفر تا صد در دات نت قسمت 3 : ساختار اجرای کوئری رایگان
4 آموزش لینک (LINQ) صفر تا صد در دات نت قسمت 4 : عملگرهای استاندارد رایگان
5 آموزش لینک (LINQ) صفر تا صد در دات نت قسمت 5 : عملگرهای استاندارد رایگان
6 آموزش لینک (LINQ) صفر تا صد در دات نت قسمت 6 : عملگرهای استاندارد رایگان
7 آموزش لینک (LINQ) صفر تا صد در دات نت قسمت 7 : عملگرهای استاندارد رایگان
زمان و قیمت کل 0″ 0
2 نظر
zahra .m

سلام استاد خسته نباشید

در بخش عملگر Contains فرمودید که: "این عملگر یک یک پارامتر از نوع IEqualityComarer نیز می گیرد که جهت مقایسه المان ها مورد استفاده قرار می گیرد. "

منظورتون از نوع IEqualityComarer چیه؟ میشه لطفاً یه مثال بزنید.

حسین احمدی

سلام، وقت بخیر، IEqualityComparer در حقیقت یک Interface هست که در یک کلاس پیاده سازی میشه و امکان مقایسه دو شئ رو به شما میده. حالا شما می تونید جاهایی که این پارامتر از نوع IEqulityComparer هستند، اشیاء ای از نوع کلاس هایی رو ارسال کنید که این اینترفیس رو پیاده سازی کردند. به یک نکته دقت کنید که معمولاً کلاس Comparer رو جدا از کلاس اصلی تعریف می کنن، اما میشه داخل کلاس اصلی هم پیاده سازی رو انجام داد. به این لینک برای مثال می تونید مراجعه کنید. اگر باز هم ابهامی بود بگید که بیشتر توضیح بدم.

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....