جملة التجميع (Visual Basic)

طبق واحد أو أكثر من الوظائف التجميعية لمجموعة.

Aggregate element [As type] In collection _
  [, element2 [As type2] In collection2, [...]]
  [ clause ]
  Into expressionList

الأجزاء

  • element
    مطلوبة. يستخدم المتغير ليكرر خلال عناصر المجموعة.

  • type
    اختياري. نوع الـ element. و إذا لم يتم تحديد نوع ، نوع element يتم الاستدلال عنه من collection.

  • collection
    مطلوبة. تشير إلى المجموعة التي سيتم العمل عليها .

  • clause
    اختياري. واحد أو أكثر من عبارات الاستعلام ، مثل جملة Where ، و لتنقية نتيجة الاستعلام لتطبيق جملة التجميع أو جمل إلى .

  • expressionList
    مطلوبة. واحد أو أكثر من التعبيرات المفصولة بفواصل و التي تحدد دالة التجميع لتطبق على المجموعة . و يمكنك تطبيق اسم مستعار لوظيفة التجميع لتعيين اسم عضو لنتيجة الاستعلام . و إذا لم يتم توفير أي اسم مستعار ، سيُستخدم اسم وظيفة التجميع . و للحصول على أمثلة، راجع مقطع عن الوظائف التجميعية لاحقًا في هذا الموضوع .

ملاحظات

جملة Aggregate يمكن استخدامها لتضمين وظائف التجميع في الاستعلامات الخاصة بك . وظائف التجميع تقوم بإجراء فحوصات و عمليات حسابية عبر مجموعة من القيم و ترجع قيمة مفردة . و يمكنك الوصول إلى القيمة المحسوبة باستخدام عضو من نوع نتيجة الاستعلام . وظائف التجميع القياسية التي يمكنك استخدامها هي دوال All، و Any، و Average، و Count، و LongCount، و Max، و Min، و Sum . و تعتبر هذه الدوال مألوفة للمطورين المعتادين على التجميعات في SQL . و هم موصوفون في القسم التالي لهذا الموضوع .

نتيجة وظيفة التجميع مضمنة في نتيجة الاستعلام على هيئة حقل لنوع نتيجة الاستعلام. يمكنك توفير اسم مستعار لنتيجة وظيفة التجميع لتحديد اسم العضو لنوع نتيجة الاستعلام الذي سيحوي قيمة التجميع . و إذا لم يتم توفير أي اسم مستعار ، سيُستخدم اسم وظيفة التجميع .

جملة Aggregate يمكنها بدء استعلام أو يمكن أن يتم تضمينها كجملة إضافية في الاستعلام . و إذا كانت جملة Aggregate تبدأ جملة الاستعلام ، تكون النتيجة القيمة مفردة و التي هي نتيجة وظيفة التجميع المحددة في جملة Into . و إذا تم تحديد أكثر من وظيفة تجميعية واحدة في جملة Into ، فإن الاستعلام يرجع نوع مفرد مع خاصية منفصلة و ذلك للرجوع إلى نتيجة كل وظيفة تجميعية في جملة Into . إذا تم تضمين جملة Aggregate كعبارة إضافية في الاستعلام ، سيكون لدى النوع المُرجَع في مجموعة الاستعلام خاصية منفصلة و ذلك للرجوع إلى نتيجة كل وظيفة تجميعية في جملة Into .

وظائف تجميعية

القائمة التالية تصف الوظائف التجميعية القياسية التي يمكن استخدامها مع جملة Aggregate .

  • All
    سيتم إرجاع true إذا كانت كل عناصر المجموعة تحقق الشرط المحدد ; وإلا سيتم إرجاع false. فيما يلي مثال:

    Dim customerList1 = Aggregate order In orders
                        Into AllOrdersOver100 = All(order.Total >= 100)
    
  • Any
    سيتم إرجاع true إذا كان أي عنصر في المجموعة يحقق الشرط المحدد ; وإلا سيتم إرجاع false. فيما يلي مثال:

    Dim customerList2 = From cust In customers
                        Aggregate order In cust.Orders
                        Into AnyOrderOver500 = Any(order.Total >= 500)
    
  • Average
    حساب المتوسط لكل العناصر في المجموعة أو حساب التعبير المدعم لكافة العناصر في المجموعة . فيما يلي مثال:

    Dim customerOrderAverage = Aggregate order In orders
                               Into Average(order.Total)
    
  • Count
    حساب عدد العناصر في المجموعة . يمكنك توفير تعبير Boolean الاختياري لحساب فقط عدد العناصر في مجموعة التي تستوفي الشرط . فيما يلي مثال:

    Dim customerOrderAfter1996 = From cust In customers
                                 Aggregate order In cust.Orders
                                 Into Count(order.OrderDate > #12/31/1996#)
    
  • Group
    يشير إلى نتائج الاستعلام التي تم تجميعها كنتيجة لجملة Group By أو Group Join . دالة Group صالحة فقط في جملة Into لجملة Group By أو Group Join . و لمزيد من المعلومات والأمثلة، راجع مجموعة بواسطة عبارة (Visual Basic) و عبارة ربط مجموعة (Visual Basic) .

  • LongCount
    حساب عدد العناصر في المجموعة . يمكنك توفير تعبير Boolean الاختياري لحساب فقط عدد العناصر في مجموعة التي تستوفي الشرط . إرجاع النتيجة كـ Long. على سبيل المثال، راجع وظيفة التجميع Count .

  • Max
    حساب القيمة الأكبر في المجموعة أو حساب التعبير المدعم لكافة العناصر في المجموعة . فيما يلي مثال:

    Dim customerMaxOrder = Aggregate order In orders
                           Into MaxOrder = Max(order.Total)
    
  • Min
    حساب القيمة الأصغر في المجموعة أو حساب التعبير المدعم لكافة العناصر في المجموعة . فيما يلي مثال:

    Dim customerMinOrder = From cust In customers
                           Aggregate order In cust.Orders
                           Into MinOrder = Min(order.Total)
    
  • Sum
    حساب مجموع كل العناصر في المجموعة أو حساب التعبير المدعم لكافة العناصر في المجموعة . فيما يلي مثال:

    Dim customerTotals = From cust In customers
                         Aggregate order In cust.Orders
                         Into Sum(order.Total)
    

مثال

يظهر المثال تعليمات برمجية التالي كيفية استخدام جملة Aggregate لتطبيق الوظائف التجميعية لنتيجة الاستعلام.

Public Sub AggregateSample()
  Dim customers = GetCustomerList()

  Dim customerOrderTotal =
      From cust In customers
      Aggregate order In cust.Orders
      Into Sum(order.Total), MaxOrder = Max(order.Total),
      MinOrder = Min(order.Total), Avg = Average(order.Total)

  For Each customer In customerOrderTotal
    Console.WriteLine(customer.cust.CompanyName & vbCrLf &
                     vbTab & "Sum = " & customer.Sum & vbCrLf &
                     vbTab & "Min = " & customer.MinOrder & vbCrLf &
                     vbTab & "Max = " & customer.MaxOrder & vbCrLf &
                     vbTab & "Avg = " & customer.Avg.ToString("#.##"))
  Next
End Sub

إنشاء وظائف تجميعية معرّفة من قبل المستخدم

يمكنك تضمين الوظائف التجميعية المخصصة الخاصة بك في تعبير الاستعلام عن طريق إضافة أساليب التوسيع للنوع IEnumerable<T> . عندها يتمكن أسلوبك المخصص من تنفيذ حسابات أو عمليات على مجموعة قابلة للإحصاء و التي تشير إلى الوظيفة التجميعية الخاصة بك . و لمزيد من المعلومات حول الأساليب الموسعة ، راجع أساليب التوسيع (Visual Basic).

على سبيل المثال، التعليمات البرمجية التالية تظهر الوظيفة التجميعية المخصصة التي تقوم بحساب القيمة الوسيطة لمجموعة من الأرقام . هناك حملان زائدان لأسلوب التوسيع Median . يقبل التحميل الزائد الأول مجموعة من نوع IEnumerable(Of Double) كمدخل . إذا تم استدعاء الوظيفة التجميعية Median لحقل الاستعلام من نوع Double ، فإنه يمكن استدعاء هذا الأسلوب . التحميل الزائد الثاني لأسلوب Median يمكن تمريره من قبل أي نوع عام . التحميل الزائد العام لأسلوب Median يأخذ معلمة ثانية و التي ترجع تعبير lambda Func(Of T, Double) لعرض القيمة للنوع (من مجموعة) كالقيمة المطابقة من نوع Double. ثم تفوض حساب القيمة الوسيطة إلى التحميل الزائد الأخر من أسلوب Median . لمزيد من المعلومات حول تعبير لامدا، راجع تعبيرات لامدا.

Imports System.Runtime.CompilerServices

Module UserDefinedAggregates

    ' Calculate the median value for a collection of type Double.
    <Extension()>
    Function Median(ByVal values As IEnumerable(Of Double)) As Double
        If values.Count = 0 Then
            Throw New InvalidOperationException("Cannot compute median for an empty set.")
        End If

        Dim sortedList = From number In values
                         Order By number

        Dim medianValue As Double

        Dim itemIndex = CInt(Int(sortedList.Count / 2))

        If sortedList.Count Mod 2 = 0 Then
            ' Even number of items in list.
            medianValue = ((sortedList(itemIndex) + sortedList(itemIndex - 1)) / 2)
        Else
            ' Odd number of items in list.
            medianValue = sortedList(itemIndex)
        End If

        Return medianValue
    End Function

    ' "Cast" the collection of generic items as type Double and call the 
    ' Median() method to calculate the median value.
    <Extension()>
    Function Median(Of T)(ByVal values As IEnumerable(Of T),
                          ByVal selector As Func(Of T, Double)) As Double
        Return (From element In values Select selector(element)).Median()
    End Function

End Module

التعليمات البرمجية التالية تظهر عينة الاستعلامات التي تستدعي الوظيفة التجميعية Median في مجموعة من النوع Integer ، ومجموعة من النوع Double . استعلام الذي يستدعي الوظيفة التجميعية Median في مجموعة من النوع Double تستدعي التحميل الزائد لأسلوب Median الذي يقبل مجموعة من نوع Double كمدخل . الاستعلام الذي يستدعي الوظيفة التجميعية Median في مجموعة من النوع Integerتستدعي التحميل الزائد لأسلوب Median .

Module Module1

    Sub Main()
        Dim numbers1 = {1, 2, 3, 4, 5}

        Dim query1 = Aggregate num In numbers1 Into Median(num)

        Console.WriteLine("Median = " & query1)

        Dim numbers2 = {1.9, 2, 8, 4, 5.7, 6, 7.2, 0}

        Dim query2 = Aggregate num In numbers2 Into Median()

        Console.WriteLine("Median = " & query2)
    End Sub

End Module

راجع أيضًا:

المرجع

تحديد العبارة (Visual Basic)

فقرة From (Visual Basic)

عبارة Visual Basic) where)

مجموعة بواسطة عبارة (Visual Basic)

المبادئ

مقدمة حول LINQ في Visual Basic

موارد أخرى

استعلامات (Visual Basic)