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

Take, Skip, TakeWhile and SkipWhile in LINQ

بدأه D a r K T o u c h في 10 أكتوبر 2010 · 2 رد · 790 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

Take, Skip, TakeWhile, SkipWhile

في متابعة الحديث عن ما يتعلق بتقنية LINQ في هذا الدرس, سنكمل الحديث عن دوال جديدة لها وظائف مفيدة ومساعدة في الاستعلام, فقط اطلب منك عزيزي القارئ التركيز لفكرة عمل هذه الدوال لأنها تتشابه في العمل لكن بطريقة معكوسة... كيف !!

لنبدأ:

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

لنرى كيف تعمل هذه الدالة .

Take

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

        var Take = (from r in Numbers
                    select r).Take(3);
        foreach(int Result in Take)
        {
            Label_Result.Text +=  Result.ToString() + "<br /> ";
	  }

النتيجة:

5

4

1

How the example work

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

Skip

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

        var Skip = (from r in Numbers
                    select r).Skip(3);
        foreach (int Result in Skip)
        {
            Label_Result.Text += Result.ToString() + "<br /> ";
        }

النتيجة:

3

9

8

6

7

2

0

How the example work

بكل بساطة العملية عكس عملية الـ Take حيث في Take نأخد الارقام على حسب عدد الـ count ونهمل ما تبقى من الاعداد الموجودة في المصفوفة,بينما الـ Skip

تهمل الاعداد على حسب الـ count وتأخد ما تبقى من الاعداد ويتم عرضها .

TakeWhile

هذه الدالة تحتاج إلى تركيز لان راح نضيف شيء جديد إلى الاستعلام الخاص بـ LINQ وهو ما يعرف بـ ( Lambda Expressions ) (سوف أضع مصادر في أخر الموضوع لشرح الـ ( Lambda Expressions )

طبعا نرجع إلى دالتنا حيث أنها مثل الـ Take لكن مع شرط وأتوقع من الاسم واضح , مثلا

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

        var TakeWhile = (from r in Numbers
                         select r).TakeWhile(m => m < 6);
        foreach (int Result in TakeWhile)
        {
            Label_Result.Text += Result.ToString() + "<br />";
        }

لو بتلاحظ عزيزي القارئ استخدمت الـ Lambda Expression وقلت له الشرط

اخذ الارقام من المصفوفة التي اقل من 6 وكما عملنا سابق في دالة الـ Take لحالها انها تأخذ وتهمل البقية .

النتيجة:

5

4

1

3

How the example work

الطريقة بسيطة طبعا راح ياخذ اول رقم من المصفوفة وهو رقم 5 ويتحقق منه هل هو اصغر من 6 , اكيد نعم راح يرجعة كـ نتيجة للعرض وصولا الى رقم 9 راح ينلغي الشرط , بعدها خلاص الدالة راح توقف عملها .

SkipWhile

اخر دالة لهذا الموضوع هي عكس الدالة السابقة ومشابهة لدالة الـ Skip

بس الفرق الوحيد هنا انها تأتي مع شرط لكن في طريقة اخذ العنصر لا تختلف عن دالة Skip

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

        var SkipWhile = (from r in Numbers
                         select r).SkipWhile(m => m < 6);
        foreach (int Result in SkipWhile)
        {
            Label_Result.Text += Result.ToString() + "<br />";
        }

النتيجة:

9

8

6

7

2

0

How the example work

طبا يمكن تتسائل عزيزي القارئ يوجد رقمين اصغر من 6 ( 2 و 0 ) لان مثل ما قلت سابقا الدالة Skip تهمل العناصر السابقة وتأخذ جميع ما تبقى

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

اخواني نستطيع استخدام دالة الـ Take مع دالة الـ Skip في نفس الوقت

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

        var SkipTake = (from r in Numbers
                        select r).Skip(2).Take(2);
        foreach (int Result in SkipTake)
        {
            Label_Result.Text += Result.ToString() + "<br />";
        }

How the example work

اتوقع خلاص انها مفهومة بعد شرح كل دالة المفروض بدون تجربة نتوقع الجواب النهائي لهذا المثال , كيفية عمل هذا المثال انه في بداية الامر راح يعمل Skip لعددين وهما 5 و 4 وبعدها بيأخذ عددين وهما 1 , 3

النتيجة:

1

3

مصادر:

Lambda Expressions (C# Programming)

How to: Use Lambda Expressions in a Query (C# Programming Guide)

Lambda Expressions (Visual Basic)

How to: Create a Lambda Expression (Visual Basic)

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

اخواني في نهاية الموضوع اتمنى ان شرحي كان بسيط وفي نفس الوقت استطعت ايصال المعلومة بشكل سليم لكم .

My Latest

Hello Entity Framework Code First

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

#2

السلام عليكم

بعد شرحك جزالك الله الخير ساحاول ان استذكر معك واتدرب

بالمثال الاول ليتم تطبيقه على GRidview

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

    	var Take = (from r in Numbers
                	select r).Take(3);
    	GridView1.DataSource = Take.ToArray();
    	GridView1.DataBind();

او

    	int[] Numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
    	var Take = Numbers.Take(3);
    	GridView1.DataSource = Take.ToArray();
    	GridView1.DataBind();

كذلك باقي الامثلة ...

موضوع رائع اخي ونسالك الاكمال :)

جزاك الله كل خير

In bad state

#3

السلام عليكم ورحمة الله وبركاتة

شكرا اخي X-File على الاضافة

وكل ما تجمعت المعلومات عمت الفائدة

وبالتوفيق لك

1

My Latest

Hello Entity Framework Code First

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

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