الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Single,SingleOrDefault,First,FirstOrDefault,Last LastOrDefault in LINQ

بدأه D a r K T o u c h في 14 أكتوبر 2010 · 0 رد · 416 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1

Single , SingleOrDefault , First , FirstOrDefault , Last , LastOrDefault in LINQ

في متابعة الحديث عن تقنية الـ LINQ اليوم درسنا راح نتكلم فيه عن مجموعة من الدوال , مهمة هذه الدوال اختيار عنصر واحد فقط سواء ان يكون العنصر واحد او من بين مجموعة عناصر .. كيف !!

Single

هذه الدالة تعني شي واحد عندما نستخدمها في الاستعلام الخاص بـ LINQ سوف نستخدمها لطلب نتيجة واحده فقط , واهم شيئ نحن نكون على علم بأنك النتيجة سوف تكون واحده فقط.

لنأخد المثال التالي:

        int[] Numbers = { 1, 2, 3, 4, 5, 6 };

        var Single = (from r in Numbers
                      where r > 5
                      select r).Single();

        Label_Result.Text = Single.ToString();

النتيجة:

6

How the example work

بكل بساطة اخواني انا ذكرت ان عند استخدام هذه الدالة نكون على علم بأن النتيجة سوف تكون واحدة فقط , وكما في المثال النتيجة 6 من المصفوفة .

SingleOrDefault

بصراحة لا تختلف عن الدالة Single لكن توجد فائدة جميلة في هذه الدالة هي عندما لا توجد نتيجة للأسترجاع ترجع قيمة للدلالة على انه لا يوجد قيمة وهذا شيئ مفيد عندما نريد وضع شرط للتحقق مثلا من وجود البيانات وهكذا.

مثلا اذا كانت البيانات من نوع int راح يرجع لنا 0 واذا كان من نوع bool راح يرجع false , هكذا تمت مساعدتنا للتحقق

لنأخد مثال:

        int[] Numbers = { 1, 2, 3, 4, 5, 6, 7 };

        var Single = (from r in Numbers
                      where r > 7
                      select r).SingleOrDefault();
        if (Single == 0)
        {
            Label_Result.Text = "No Result Found !";
        }
        else
        {
            Label_Result.Text = Single.ToString();
        }

مثلا اذا كانت المصفوفة من نوع string نستطيع استخدام الـ null في التحقق

مثال:

        string[] Names = { "ali", "hassan", "Noor" };

        var SD = (from r in Names
                  where r.StartsWith("m")
                  select r).SingleOrDefault();
        if (SD == null)
        { 
            Label_Result.Text = "No Result found";
        }
        else { 
            Label_Result.Text = SD.ToString();
        }

النتيجة:

طبعا راح يعطينا رسالة الخطأ لان لايوجد أي نتيجة مطابقة.

How the example work

المثال بسيط عملت شرط انه يبحث عن الاسماء التي تبدأ بحرف m ومن الواضح ان المصفوفة لا تحتوي على اسماء تبدأ بهذا الحرف,النتيجة راح تكون رسالة الخطأ.

First

هذه الدالة تختلف عن السابقة حيث انها تتعامل مع اكثر من نتيجة لكن سوف يتم عرض نتيجة واحده فقط, لنوضح ذلك بمثال

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

        var First = (from r in Numbers
                      where r > 6
                      select r).First();
        Label_Result.Text = First.ToString();

النتيجة:

7

How the Example work

لو نلاحظ ان في الشرط نريد الارقام التي تكون اكبر من الرقم 6 ويوجد في المصفوفة 4 ارقام اكبر منه لكن هنا يأتي دور الدالة First حيث انها اخذت اول نتيجة من الارقام التي تكون اكبر من الرقم 6.

FirstOrDefault

هذه الدالة لايوجد بها أي اختلاف عن الـ First وايضا ترجع لنا قيمة لتساعدنا على التحقق, على سبيل المثال:

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

        var First = (from r in Numbers
                     where r > 10
                     select r).FirstOrDefault();
        if (First == 0)
        {
            Label_Result.Text = "No Result found !";
        }
        else
        {
            Label_Result.Text = First.ToString();
        }

النتيجة:

راح يطبع رسالة الخطأ لان لايوجد نتيجة, ومثل ما ذكرت انها ترجع قيمة للتحقق

وبما ان المصفوفة من نوع int راح يرجع قيمة 0 للتحقق ,, وهكذا

Last , LastOrDefault

الدالتين مثل First , FirstOrDefault بس بشكل معكوس حيث ان الدالة First اذا وجد اكثر من ناتج تأخذ اول ناتج دالة الـ Last راح يكون الناتج اخر عدد, و LastOrDefaultتعمل مثل FirstOrDefault وايضا بشكل معكوس .

ملاحظات عامة:

- ذكرت ان استخدام دالتي Single,SingleOrDefault عندما نكون على علم ان النتيجة سوف تكون واحدة فقط

- يفضل استخدام LastOrDefault, FirstOrDefaulr , SingleOrDefaul لان يوجد طريقة للتحقق وهذا يقلل من حدوث الخطأ

----------

في النهاية اخواني اتوقع ان الدوال سهلة بس تحتاج الى تركيز واهم شي الانتباه عند الاستخدام لمنع حدوث الاخطاء في الموقع

تم تعديل هذه المشاركة بواسطة D a r K T o u c h في 14 أكتوبر 2010 في 18:50

2

My Latest

Hello Entity Framework Code First

--------------------

مواضيع مشابهة