جملة التجميع (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)
المبادئ
مقدمة حول LINQ في Visual Basic