عملگرهای Element در Linq

عملگرهای Element در Linq

در مقاله قبل ، با عملگرهای تبدیل در LINQ آشنا شدید . در این مقاله می خواهیم عملگرهای المنت را بهمراه مثال هایی بررسی کنیم.

عملگرهای المنت به آنهای گفته می شوند که یک عنصر را بعنوان خروجی برمیگردانند . مثلا در یک مجموعه می خواهیم یک آیتم خاص را با شرطی خاص برگردانیم مثلا کاربری که ID آن برابر ۲۱۰ می باشد .

 

عملگر First :

در پایان یک query می توان از First استفاده کنیم . اگر query بدرستی اجرا شود و آیتم موردنظر را نیز برگرداند ، اولین آیتم را به عنوان خروجی در نظر می گیرد . به مثال زیر توجه کنید :

public static void FirstSimple()

        {

            var products = new ProductRepository().GetAll();

            Product product12 = (

                                    from product in products

                                    where product.ProductID == 12

                                    select product

                                ).First();

            Console.WriteLine("ID: {0}\tName: {1}\tCategory: {2}", product12.ProductID, product12.ProductName, product12.Category);

        }

در مثال دوم از First شرطی استفاده می کنیم :

      {

            string[] strings = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };

            string startsWithO = strings.First(s => s[0] == 'o');

            Console.WriteLine("A string starting with 'o': {0}", startsWithO);

        }

 

گفتیم که اولین رشته ای را برگردان که با حرف o شروع شود .

نکته مهم : کار با عملگر First خطرناک می باشد ! بدین معنی که اگر query آیتمی برنگرداند ، برنامه در run time دچار خطا می شود . بنابراین فقط در مواقعی باید از First استفاده کنیم که مطمئن باشیم query ما حتما یک خروجی دارد .

برای رفع مشکل فوق  ، از دات نت ورژن ۳٫۵ به بعد ، عملگر FirstOrDefault تعریف شد .

 

عملگر FirstOrDefault :

اگر رشته پرس و جوی ما نتیجه ای برنگرداند (مانند مثال زیر) در صورتی که از FirstOrDefault استفاده کرده باشیم ، با خطای runtime مواجه نمی شویم :

public static void FirstOrDefaultSimple()

        {

            int[] numbers = { };

            int firstNumOrDefault = numbers.FirstOrDefault();

            Console.WriteLine(firstNumOrDefault);

        }

خروجی مثال فوق برابر صفر می باشد . (زیرا پیش فرض int صفر می باشد)

 

FirstOrDefault شرطی :

در مثال دوم از این عملگر ، شرط مورد نظر را روی خود عملگر پیاده می کنیم :

public static void FirstOrDefaultCondition()

        {

            var products = new ProductRepository().GetAll();

            Product product789 = products.FirstOrDefault(p => p.ProductID == 789);

            Console.WriteLine("Product 789 exists: {0}", product789 != null);

        }

 

عملگر ElementAt :

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

public static void ElementAt()

        {

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

            int fourthLowNum = (

                                    from number in numbers

                                    where number > 5

                                    select number

                               ).ElementAt(1);  // second number is index 1 because sequences use 0-based indexing

            Console.WriteLine("Second number > 5: {0}", fourthLowNum);

        }

توضیح : خروجی مثال فوق ، عدد ۸ می باشد .

مقاله عملگرهای المنت در LINQ به پایان رسید. در مقاله بعد ، عملگرهای Generation را در LINQ بررسی خواهیم کرد .


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



دیدگاه ها :