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

و

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

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

در این بخش درباره عملگرهای استانداردی که در LINQ برای ایجاد کوئری ها می تونیم از اونها استفاده کنیم صحبت خواهیم کرد. در بخش های قبلی با یکی از این عملگر ها به نام where آشنا شدیم که وظیفه فیل تر سازی اطلاعات در کوئری های LINQ رو داره. در این بخش به طور مفصل در باره تک تک این عملگرها بحث خواهیم کرد.

کلا" دو دسته از عملگرهای استاندارد در LINQ وجود دارند، اپراتورهای استانداری که بر روش اشیاء ای از نوع اینترفیس
کد زیر مثالی در باره استفاده از عملگرهای استاندارد LINQ است:

string myStr = "This text is only for test";
string[] words = myStr.Split(' ');

var query = from word in words
                 group word.ToLower() by word.Length into gr
                 orderby gr.Key
                 select new { Length = gr.Key, Words = gr };
foreach (var obj in query)
{
    Console.WriteLine(obj.Length);
    foreach (string word in obj.Words)
    {
        Console.WriteLine(word);
    }
}

در کد بالا، ابتدا رشته ای تعریف شده و کلمات رشته داخل یک آرایه قرار میگیرند. سپس با یک کوئری LINQ کلمات به ترتیب طول مرتب شده و دسته بندی می شن، بعد از دسته بندی حروف با یک دستور foreach مقادیر خروجی نمایش داده می شن. عملگرهایی که در بالا استفاده شده است، یکی عملگر group by برای دسته بندی خروجی و یکی هم عملگر orderby برای مرتب سازی خروجی می باشد. خروجی کد بالا به صورت زیر خواهد بود:

is
3
for
4
this
text
only
test

در ادامه به بررسی هر یک از عملگرهای LINQ خواهیم پرداخت. در کدهای نوشته شده، به هر دو روش نوشتن کوئری های LINQ و استفاده از Extention Method ها مثال ها را خواهیم آورد.

عملگرهای مرتب سازی

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

  1. OrderBy: که عملیات مرتب سازی لیست به صورت صعودی را انجام می دهد. (LINQ Syntax = orderby)
  2. OrderByDescending: عملیات مرتب سازی لیست به صورت نزولی را انجام می دهد. (LINQ Syntax = orderby -- descending)
  3. ThenBy: عملیات مربت سازی ثانویه را به صورت صعودی انجام می دهد (--,-- LINQ Syntax = orderby)
  4. ThenByDescending: عملیات مرتب سازی ثانویه به صورت نزولی انجام می دهد (LINQ Syntax = orderby --,-- descending)
  5. Reverse: ترتیب خروج کوئری را برعکس می کند (این عملگر معادلی در ساختار LINQ ندارد)

در ادامه با ارائه یک مثال با هر یک از عملگر های بالا بیشتر آشنا خواهیم شد. (مثال هم به صورت کوئری های LINQ و هم با استفاده از متدهای موجود زده خواهند شد)

عملگر OrderBy:


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

IEnumerable query = from n in numbers
                                     orderby n
                                     select n;

IEnumerable query2 = numbers.OrderBy(n => n); // query using OrderBy extention method

foreach (int number in query)
    Console.WriteLine(number);

خروجی کد بالا:

1
2
3
4
5
6
7
8
9

عملگر OrderByDescending:


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

IEnumerable query = from n in numbers
                                     orderby n descending
                                     select n;

IEnumerable query2 = numbers.OrderByDescending(n => n);

foreach (int number in query)
    Console.WriteLine(number);

خروجی کد بالا:

9
8
7
6
5
4
3
2
1

عملگر ThenBy: (برای مثال این بخش از کلاس Person که در بخش اول نوشتیم استفاده می کنیم)


 List persons = new List()
{
    new Person() { FirstName = "Hosein", LastName = "Ahmadi", Age = 23 },
    new Person() { FirstName = "Hamid", LastName = "Asgari", Age = 27 },
    new Person() { FirstName = "Reza", LastName = "Karimi", Age = 42 },
    new Person() { FirstName = "Mohammad", LastName = "Zamani", Age = 31 },
    new Person() { FirstName = "Reza", LastName = "Ahmadi", Age = 26 },
    new Person() { FirstName = "Ali", LastName = "Kiani", Age = 17 },
    new Person() { FirstName = "Saman", LastName = "Skandari", Age = 25 },
    new Person() { FirstName = "Karim", LastName = "Heydari", Age = 19 }
};

var query = from p in persons
                 orderby p.FirstName, p.Age
                 select p;

var query2 = persons.OrderBy(n => n.FirstName).ThenBy(n => n.Age);

foreach (Person p in query2)
{
    Console.WriteLine(p.ToString());
    Console.WriteLine("--------------------");
}

خروجی کد بالا:

FirstName: Ali
LastName: Kiani
Age: 17
--------------------
FirstName: Hamid
LastName: Asgari
Age: 27
--------------------
FirstName: Hosein
LastName: Ahmadi
Age: 23
--------------------
FirstName: Karim
LastName: Heydari
Age: 19
--------------------
FirstName: Mohammad
LastName: Zamani
Age: 31
--------------------
FirstName: Reza
LastName: Ahmadi
Age: 26
--------------------
FirstName: Reza
LastName: Karimi
Age: 42
--------------------
FirstName: Saman
LastName: Skandari
Age: 25
--------------------

عملگر ThenByDescending:


 List persons = new List()
{
    new Person() { FirstName = "Hosein", LastName = "Ahmadi", Age = 23 },
    new Person() { FirstName = "Hamid", LastName = "Asgari", Age = 27 },
    new Person() { FirstName = "Reza", LastName = "Karimi", Age = 42 },
    new Person() { FirstName = "Mohammad", LastName = "Zamani", Age = 31 },
    new Person() { FirstName = "Reza", LastName = "Ahmadi", Age = 26 },
    new Person() { FirstName = "Ali", LastName = "Kiani", Age = 17 },
    new Person() { FirstName = "Saman", LastName = "Skandari", Age = 25 },
    new Person() { FirstName = "Karim", LastName = "Heydari", Age = 19 }
};

var query = from p in persons
                 orderby p.FirstName ascending, p.Age descending
                 select p;

var query2 = persons.OrderBy(n => n.FirstName).ThenByDescending(n => n.Age);

foreach (Person p in query)
{
    Console.WriteLine(p.ToString());
    Console.WriteLine("--------------------");
}

عملگر Reverse:


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

List query = numbers.Reverse().ToList();

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

خروجی کد بالا:

9
2
8
3
5
7
1
4

عملگرهایی که در بالا در موردشان صحبت کردیم برای مرتب سازی نتایج کوئری ها استفاده می شوند. در بخش بعدی در مورد عملگر های مجموعه ای (Set Operators) صحبت خواهیم کرد.

عملگرهای مجموعه ای

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

  1. Distinct: جهت حذف المان های تکراری در یک مجموعه استفاده می شود (معادل در کوئری های LINQ ندارد)
  2. Except: المان های تکراری دو مجموعه حذف شده و تنها المان های غیر تکراری در نتیجه ظاهر می شوند (معادل LINQ ندارد)
  3. Intersect: خروجی حاوی اشتراک دو مجموعه خواهد بود (معادل LINQ ندارد)
  4. Union: خروجی حاوب اجتماع دو محموعه خواهد بود.

در زیر با ارئه مثال های گوناگون با کاربرد هر یک از عملگرها آشنا خواهیم شد.

عملگر Distinct:


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

var query = set1.Distinct();

foreach (int i in query)
    Console.WriteLine(i);

خروجی کد بالا:

4
1
7
5
2
8
6
9

عملگر Except:


int[] set1 = { 3, 6, 1, 2, 7, 8 };
int[] set2 = { 5, 2, 3, 7, 6 };

var query = set1.Except(set2);

foreach (int i in query)
    Console.WriteLine(i);

خروجی کد بالا:

1
8

عملگر Intersect:


 int[] set1 = { 3, 6, 1, 2, 7, 8 };
int[] set2 = { 5, 2, 3, 7, 6 };

var query = set1.Intersect(set2);

foreach (int i in query)
    Console.WriteLine(i);

خروجی کد بالا:

3
6
2
7

عملگر Union:


int[] set1 = { 3, 6, 1, 2, 7, 8 };
int[] set2 = { 5, 2, 3, 7, 6 };

var query = set1.Union(set2);

foreach (int i in query)
    Console.WriteLine(i);

خروجی کد بالا:

3
6
1
2
7
8
5

عملگرهای فیلتر کردن اطلاعات

عملگرهای بعدی که در مورد آنها صحبت خواهیم کرد برای فیل تر کردن اطلاعات به کار می روند. دو نوع عملگر برای اینکار وجود دارد:

  1. OfType: در داخل یک مجموعه تنها عناصری از یک نوع خاص را بر می گرداند (معادل LINQ ندارد)
  2. Where: عملیات فیلترینگ را بر اساس شرطی خاص بر میگرداند.

عملگر OfType

برای آشنایی بیشتر با این متد مثالی با استفاده از یک ArrayList خواهیم زد، ArrayList شئ ایست که می تواند هر نوع داده ای را در خود ذخیره کند. حال اگر ما بخواهیم از داخل یک ArrayList که حاوی چندین نوع می باشد، یک نوع خاص را استخراج کنیم می توانیم از این عملگر استفاده کنیم:

ArrayList list = new ArrayList() { 2, 7, "A", 'C', 2.7, 4, "D" };

IEnumerable query1 = list.OfType();
IEnumerable query2 = list.OfType();

foreach (int i in query1)
    Console.WriteLine(i);
foreach (string s in query2)
    Console.WriteLine(s);

خروجی کد بالا:

2
7
4
A
D

عملگر where

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

string[] s = { "Hello LINQ!", "Hello C#!", "LINQ is very flexible","Hello Generics!"};

IEnumerable query = from w in s
                                        where w.ToLower().Contains("linq")
                                        select w;
IEnumerable query2 = s.Where(str => str.ToLower().Contains("linq"));
foreach (string linq in query)
    Console.WriteLine(linq);

خروجی کد بالا:

Hello LINQ!
LINQ is very flexible

در این مقاله در مورد سه گروه از عملگر های استاندارد صحبت کردیم، عملگرهای مرتب سازی، عملگرهای مجموعه ای و عملگرهای فیل تر سازی. به دلیل حجم زیاد این عملگرها، در طول چند بخش در مورد عملگرها صحبت خواهم کرد. در بخش بعدی در مورد عملگرهای Quantifier، عملگرهای Projection و عملگره
#آموزش_linq #عملگرهای_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
1 نظر
fardin_esmi

very good

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

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