PDA

View Full Version : آموزش LINQ(قسمت ششم)



zkazemi
یک شنبه 01 شهریور 1388, 09:15 صبح
عملگر Distinct
در یک مجموعه رکورد های تکراری را حذف می کند.و مجموعه بازگشتی فاقد رکورد تکراری خواهد بود. این عملگر مشابه عملگر distinct در دستور select در T-SQL می باشد.در مثال زیر 13 آیتم وجود دارد . که تنها 10 آنها تکراری نیستند.



List<int> quantity = new List<int> {1, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 9, 10};
IEnumerable<int> val = numbers.Distinct();
foreach (int num in val)

listbox1.Items.Add(num);




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

1
2
3
4
5
6
7
8
9

10
به عنوان یک مثال دیگر با استفاده از سینتکس متد :



var expr =
customers
.SelectMany(c => c.Orders)
.Join(products,
o => o.IdProduct,
p => p.IdProduct,
(o, p) => p)

.Distinct();

بااستفاده از سینتکس کوئری:



var expr =
(from c in customers
from o in c.Orders
join p in products
on o.IdProduct equals p.IdProduct
select p

).Distinct();

عملگر Union
این عملگر برای اجتماع دو مجموعه برگشت داده شده استفاده می شود. به این ترتیب یک مجموعه در نهایت به خروجی فرستاده می شود. این عملگربا عملگر concat متفاوت است .
در مثال زیر دو لیست از داده های صحیح وجوددارد.این لیست ها مقادیر تکراری ندارند.حال از عملگر union استفاده می کنیم .



int[] numbers1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} ;
int[] numbers2 = { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20} ;
IEnumerable<int> union = numbers1.Union(numbers2);
foreach (int num in union)

listBox1.Items.Add(num);

نتیجه قطعه کد با نمایش اعداد از 1 تا 20 است . در مثال بعدی از دو مجموعه حاوی برخی مقادیر تکراری استفاده شده است . می خواهیم ببینم که در صورت استفاده از عملگر union نتیجه بازگشتی چه خواهد بود.



int[] numbers1 = { 1, 1, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 9, 9, 10} ;
int[] numbers2 = { 1, 3, 5, 7, 9} ;
IEnumerable<int> union = numbers1.Union(numbers2);
foreach (int num in union)

listBox1.Items.Add(num);

نتیجه نمایش اعداد 1 تا 10 می باشد. بنابر این می توان نتیجه گرفت که عملگر union خود از بین دومقدار تکراری فقط یکی را در نظر می گیرد.و یک نتیجه واحد بدون آیتم های تکراری بازگشت می دهد.
عملگر intersect
این عملگر تنها مقادیر مشترک بین مجموعه های دریافتی را بر می گرداند.
در این مثال از دومجموعه استفاده شده است . همانطور که ملاحظه میکنید آیتم های مجموعه دوم در مجموعه اول نیز وجوددارد .این عملگر دو مجموعه را باهم مقایسه کرده و آیتم های مشترک بین این دو را بر می گرداند.



int[] numbers1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} ;
int[] numbers2 = { 2, 4, 6, 8, 10} ;
IEnumerable<int> shared = numbers1.Intersect(numbers2);
foreach (int num in shared)

listBox1.Items.Add(num);

خروجی قطعه کد بالا:

2
4
6
8
10
عملگر Except
این عملگر اختلاف بین دو مجموعه را بازگشت می دهد. به این معنی که مقادیر از مجموعه اول که در مجموعه دوم ظاهر نشده اند را بازگشت می دهد.به عبارت دیگر المان های مجموعه A از المان های مجموعه B کم می شود.




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

int[] numbers2 = { 2, 4, 6, 8, 10} ;
IEnumerable<int> shared = numbers1.Except(numbers2);
foreach (int num in shared)

listBox1.Items.Add(num);

خروجی قطعه کد بالا:

1
3
5
7

9
عملگر های generation
این عملگر های یک مجموعه جدید را از بین مقادیر مجموعه های موجود ایجاد می کند.
عملگر Range
این عملگر برای ایجاد یک مجموعه از اعداد در محدوده گفته شده می باشد.این عملگر دو پارامتر دریافت کرده که اولین پارامتر کران پایین و دومین پارامتر کران بالای مجموعه برگشتی را مشخص می کند.



var coolmath = Enumerable.Range(1, 10);
for each (int num in coolmath)

listbox1.Items.Add(num);

نتیجه اجرای قطعه کد بالا :

1
2
3
4
6
7
8
9

10
شما می توانید عملوند های دیگری را به این عملگر همراه کنید . در این مثال اعداد 10 تا 1 نمایش داده خواهند شد.



var coolmath = Enumerable.Range(1, 10).Reverse();
for each (int num in coolmath)

listbox1.Items.Add(num);

نتیجه اجرای قطعه کد بالا

10
9
8
7
6
5
4
3
2

1
در مثال بعدی عملگر range یک مجموعه از اعداد 1 تا 5 را تولید می کند. و سپس بر روی هر 5 آیتم یک عمل محاسباتی انجام می گیرد.



var coolmath = Enumerable.Range(1, 5).Select(x => x * 5);
for each (int num in coolmath)

listbox1.Items.Add(num);

نتیجه اجرای قطعه کد بالا:

5
10
15
20

25
عملگر Repeat
این عملگر جهت تکرار یک مقدار به تعداد گفته استفاده می شود.



var coolphrase = Enumerable.Repeat("LINQ ROCKS!", 10);
for each (string phrase in coolphrase)

listbox1.Items.Add(phrase);

در این مثال عبارت LINQROCKS! به تعداد 10 بار تکرار می شود.