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

Sum , Min , Max , Average , and Count In LINQ

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

Sum , Min , Max , Average , and Count In LINQ

في هذا الجزء من الـ LINQ سوف اتحدث عن بعد الدوال السهلة والمفيدة في الـ LINQ .

طبعا بعد النبذة الي طرحتها في موضوعي السابق ومن خلال حديثي , لقد تحدث عن خاصة بسيطة وهي الـ Count وكان حديثي بشكل بسيط , اليوم في هذا الموضوع سوف اتحدث عن 5 دوال يعرفون بأسم Aggregate Operators .

ماهو الهدف من هذه الدوال ؟

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

ملاحظة: الدوال دائما ترجع القيم من نوع int بمعنى دائما يكون عددي

فـ Sum , Min , Max , Average تتعامل مع قيم ارقام

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

اذا دعونا نأخد امثلة بسيطة توضح عمل الدوال

Sum

الوظيفة: دالة تستخدم للجمع .

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

        var Sum = (from r in Numbers
                   select r).Sum();
    Label1.Text ="The Sum Result is: "+ Sum.ToString();

النتيجة: 21

لو بنجمع الاعداد الموجودة في المصفوفة راح نحصل على نفس النتيجة

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

Min

الوظيفة: ايجاد اصغر عنصر في المصفوفة.

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

        var Min = (from r in Numbers
                   select r).Min();
        Label1.Text ="The Min Result is: "+ Min.ToString();

النتيجة: 1

لان هو اصغر رقم في المصفوفة.

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

Max

الوظيفة: ايجاد اكبر عنصر في المصفوفة

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

        var Max = (from r in Numbers
                   select r).Max();
        Label1.Text ="The Max Result is: "+ Max.ToString();

النتيجة:6

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

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

Average

الوظيفة: إيجاد المعدل للأرقام الموجدة في المصفوفة

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

        var Average = (from r in Numbers
                   select r).Average();
        Label1.Text ="The Average Result is: "+ Average.ToString();

النتيجة: 3.5 لماذا !!

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

في مثالنا لو جمعنا الأعداد 1 +2+ 3+ 4+ 5+ 6 راح يكون الناتج 21 وعند القسمة نقسم على عددها بمعني سوف يتم القسمة على 6 لان يوجد لدينا 6 أعداد فقط

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

Count

الوظيفة: عد العناصر الموجودة في المصفوفة

ملاحظة: لقد ذكرت سابقا إن الدوال التي تسبق هذه الدالة تتعامل مع الأعداد فقط, لكن مع هذه الدالة يختلف الحال

فـ عند تعاملك مع قاعدة بيانات فإنها تقوم بعد عدد الصفوف وترجع لك القيمة

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

        var Count = (from r in Numbers
                   select r).Count();
        Label1.Text ="The Count Result is: "+ Count.ToString();

النتيجة : 6

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

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

لاحظ عزيزي القارئ في هذا الموضوع عملنا شيء جديد للـ الاستعلام الخاص بـ LINQ

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

مثلا لو كان عندنا جدول الموظفين ويحتوي على حقل الراتب وكتبت استعلام يرجع لي كل الموظفين الذين يحصلون على راتب وقدرة مبلغ معين وبعدها استخدمت دالة الـ Count ,, وهكذا .

----------

في النهاية إخواني أن شاء الله استطعت إيصال المعلومة بشكل صحيح وفي نفس الوقت بسيط

دمتم سالمين.

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

1

My Latest

Hello Entity Framework Code First

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

#2

ممتاز شكرا الك اخي

جاري التطبيق

تم تعديل هذه المشاركة بواسطة easy_3a3 في 8 أكتوبر 2010 في 21:27

#3

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

جميل جدا أخي DarKTouch

لدي تعقيب بسيط مع مراعاة المقولة (العين ما تعلى على الحاجب :) )

يمكنك إستخدام الدالة Sum عن طريق تحويل المصفوفة إلى

IEnumerable<T>

كما في الكود التالي

int[] arr = {1,2,3,4,5,6};
Console.WriteLine(arr.Cast<int>().Sum());     // output 21

شكرا جزيلا على هذه المبادرة الطيبة وإلى الأمام دوما

تم تعديل هذه المشاركة بواسطة Robatic في 9 أكتوبر 2010 في 13:48

1
#4
easy_3a3 كتب:

ممتاز شكرا الك اخي

جاري التطبيق

تطبيق موفق ان اشاء الله

Robatic كتب:

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

جميل جدا أخي DarKTouch

لدي تعقيب بسيط مع مراعاة المقولة (العين ما تعلى على الحاجب :) )

يمكنك إستخدام الدالة Sum عن طريق تحويل المصفوفة إلى

IEnumerable<T>

كما في الكود التالي

int[] arr = {1,2,3,4,5,6};
Console.WriteLine(arr.Cast<int>().Sum());     // output 21

شكرا جزيلا على هذه المبادرة الطيبة وإلى الأمام دوما

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

نعم اخي اضافة جميلة ومفيدة في نفس الوقت لان الهدف من الموضوع التعلم اخي

لكن بعض الحالات ربما تأتي المصفوفة من نوع ArrayList نعرف انها تحمل اي نوع من البيانات

وظيفة الدالة Cast تجميع العناصر كلها الى نوع محدد

سيظهر خطأء

لكن في مثالنا انت جمعت كل العناصر وعملنا توحيد الى نوعها int وبعدها عملت دالة sum فلن تظهر اي مشكلة لان اساسا المصفوفة تحتوي على عناصر من نوع int

شكرا لك اخي على المعلومة

good luck

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

1

My Latest

Hello Entity Framework Code First

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

#5

سلمت اناملك وبقت لنا لكي تقدم لنا المزيد

بارك الله فيك اخوي

صراحة ابدعت كفيت و وفيت يابعدي

نطعم منك بتقديم المزيد ولا تبخل علينا في المزيد

#6

يعطيك العافية اخوي ماشاء الله نشاط ملحوظ

اللي يبي مشروع تخرج asp.net

يرسل لي رسالة خاصة

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