تا %60 تخفیف خرید برای 2 نفر با صدور مدرک فقط تا
00 00 00

آموزش 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 - آشنایی با LINQ رایگان
2 آموزش LINQ در سی شارپ :: قسمت 2 - ویژگی های سی شارپ 3 رایگان
3 آموزش LINQ در سی شارپ :: قسمت 3 - ساختار کوئری های LINQ رایگان
4 آموزش LINQ در سی شارپ :: قسمت 4 - عملگرهای استاندارد (بخش اول) رایگان
5 آموزش LINQ در سی شارپ :: قسمت 5 - عملگرهای استاندارد (بخش دوم) رایگان
6 آموزش LINQ در سی شارپ :: قسمت 6 - عملگرهای استاندارد (بخش سوم) رایگان
7 آموزش LINQ در سی شارپ :: قسمت 7 - عملگرهای استاندارد (بخش چهارم) رایگان
زمان و قیمت کل 0″ 0
1 نظر
fardin_esmi

very good

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