عملگرهای مجموعه ای در Linq بخش سوم

در دو مقاله قبل که در باره عملگرهای مجموعه ای در LINQ بحث کردیم ، دو عملگر union و distinct را بررسی کردیم . در این مقاله عملگرهای تفاضل و اشتراک در LINQ را مورد بررسی قرار خواهیم داد .

عملگر اشتراک (Intersect) :

برای اشتراک گیری بین دو مجموعه بکار میرود . یعنی عناصری که در هر دو مجموعه وجود دارند را برمیگرداند .

به مثال ساده زیر توجه کنید :

                              
public static void Intersect1()
{
    int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
    int[] numbersB = { 1, 3, 5, 7, 8 };
    var commonNumbers = numbersA.Intersect(numbersB);
    Console.WriteLine("Common numbers shared by both arrays:\n——————————-");
    foreach (var number in commonNumbers)
    {
        Console.WriteLine(number);
    }
}

خروجی برابر : ۵,۸ می باشد .

در مثال دوم می خواهیم اولین کاراکتر لیست محصولات و مشتریان را که در هر دو مشترک هستند را برگردانیم :

                              
public static void Intersect2()
{
    var products = new ProductRepository().GetAll();
    var customers = new CustomerRepository().GetAll();
    var productFirstChars =
                                from product in products
                                select product.ProductName[0];
    var customerFirstChars =
                                from customer in customers
                                select customer.CompanyName[0];
    var commonFirstChars = productFirstChars.Intersect(customerFirstChars);
    Console.WriteLine("Common first letters from Product names and Customer names:\n————————————–");
    foreach (var character in commonFirstChars)
    {
        Console.WriteLine(character);
    }
}

عملگر تفاضل (Except) :

عمل تفاضل دو مجموعه را انجام می دهد یعنی عناصری که در مجموعه اول است و در مجموعه دوم نیست .

در مثال اول ، دو مجموعه عددی داریم که بصورت زیر تعریف شده اند :

                              
        public static void Except1()
        {
            int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
            int[] numbersB = { 1, 3, 5, 7, 8 };
            IEnumerable aOnlyNumbers = numbersA.Except(numbersB);
            Console.WriteLine("Numbers in first array but not second array:\n———————————–");
            foreach (var number in aOnlyNumbers)
            {
                Console.WriteLine(number);
            }
        }

مثال دوم را مطابق معمول با دو لیست محصول و مشتری انجام می دهیم :

                              
public static void Except2()
{
    var products = new ProductRepository().GetAll();
    var customers = new CustomerRepository().GetAll();
    var productFirstChars =
                                from product in products
                                select product.ProductName[0];
    var customerFirstChars =
                                from customer in customers
                                select customer.CompanyName[0];
    var productOnlyFirstChars = productFirstChars.Except(customerFirstChars);
    Console.WriteLine("First letters from Product names, but not from Customer names:\n—————————————————");
    foreach (var character in productOnlyFirstChars)
    {
        Console.WriteLine(character);
    }
}

در تمامی این عملگرهای مجموعه ای ، دو مجموعه باید هم نوع باشند . عملگرهای مجموعه ای در این جلسه به پایان می رسد .

در مقاله بعد ، عملگرهای تبدیل (Conversion) را بررسی می کنیم .


تاریخ انتشار : ۳ فروردین ۱۳۹۵



دیدگاه ها :