Aggregate-Klausel (Visual Basic)
Wendet eine oder mehrere Aggregatfunktionen auf eine Auflistung an.
Aggregate element [As type] In collection _
[, element2 [As type2] In collection2, [...]]
[ clause ]
Into expressionList
Bestandteile
Ausdruck |
Definition |
element |
Erforderlich. Eine Variable, die zum Durchlaufen der Elemente der Auflistung verwendet wird. |
type |
Optional. Der Typ von element. Wenn kein Typ angegeben ist, wird der Typ von element von collection abgeleitet. |
collection |
Erforderlich. Bezeichnet die zu bearbeitende Auflistung. |
clause |
Optional. Eine oder mehrere Abfrageklauseln (z. B. eine Where-Klausel) zum Verfeinern des Abfrageergebnisses, auf das die Aggregate-Klausel oder -Klauseln angewendet werden. |
expressionList |
Erforderlich. Ein oder mehrere durch Trennzeichen getrennte Ausdrücke, die eine Aggregatfunktion angeben, die auf die Auflistung angewendet wird. Sie können für eine Aggregatfunktion einen Alias angeben, um einen Membernamen für das Abfrageergebnis festzulegen. Wenn Sie keinen Alias angeben, wird der Name der Aggregatfunktion verwendet. Beispiele finden Sie weiter unten in diesem Thema im Abschnitt über Aggregatfunktionen. |
Hinweise
Mit der Aggregate-Klausel können Sie in Abfragen Aggregatfunktionen angeben. Aggregatfunktionen führen für einen Satz von Werten Überprüfungen und Berechnungen aus und geben einen einzelnen Wert zurück. Sie können mithilfe eines Members des Abfrageergebnistyps auf den berechneten Wert zugreifen. Sie können die folgenden Standardaggregatfunktionen verwenden: All, Any, Average, Count, LongCount, Max, Min und Sum. Entwicklern, die sich mit Aggregaten in SQL auskennen, sollten diese Funktionen vertraut sein. Sie werden im folgenden Abschnitt dieses Themas beschrieben.
Das Ergebnis einer Aggregatfunktion wird im Abfrageergebnis als Feld des Abfrageergebnistyps aufgenommen. Sie können für das Ergebnis der Aggregatfunktion einen Alias angeben, um den Namen des Members des Abfrageergebnistyps festzulegen, der den Aggregatwert aufnimmt. Wenn Sie keinen Alias angeben, wird der Name der Aggregatfunktion verwendet.
Die Aggregate-Klausel kann eine Abfrage einleiten oder in einer Abfrage als zusätzliche Klausel angegeben werden. Wenn die Aggregate-Klausel eine Abfrage einleitet, besteht das Ergebnis aus einem einzelnen Wert, der das Ergebnis der in der Into-Klausel angegebenen Aggregatfunktion ist. Wenn in der Into-Klausel mehrere Aggregatfunktionen angegeben werden, wird von der Abfrage ein einzelner Typ mit einer separaten Eigenschaft zurückgegeben, die auf das Ergebnis der einzelnen Aggregatfunktionen in der Into-Klausel verweist. Wenn die Aggregate-Klausel in einer Abfrage als zusätzliche Klausel angegeben wird, verfügt der in der Abfrageauflistung zurückgegebene Typ über eine separate Eigenschaft, die auf das Ergebnis der einzelnen Aggregatfunktionen in der Into-Klausel verweist.
Aggregatfunktionen
In der folgenden Liste werden die Standardaggregatfunktionen beschrieben, die Sie in der Aggregate-Klausel verwenden können.
Funktion |
Beschreibungen |
All |
Gibt true zurück, wenn alle Elemente in der Auflistung eine angegebene Bedingung erfüllen, andernfalls false. Beachten Sie folgendes Beispiel: |
Any |
Gibt true zurück, wenn ein Element in der Auflistung eine angegebene Bedingung erfüllt, andernfalls false. Beachten Sie folgendes Beispiel: |
Average |
Berechnet den Durchschnitt aller Elemente in der Auflistung, oder berechnet für alle Elemente in der Auflistung einen angegebenen Ausdruck. Beachten Sie folgendes Beispiel: |
Count |
Zählt die Anzahl der Elemente in der Auflistung. Sie können einen optionalen Boolean-Ausdruck angeben, um nur die Anzahl der Elemente in der Auflistung zu zählen, die eine Bedingung erfüllen. Beachten Sie folgendes Beispiel: |
Group |
Verweist auf Abfrageergebnisse, die als Ergebnis einer Group By-Klausel oder einer Group Join-Klausel gruppiert werden. Die Group-Funktion ist nur in der Into-Klausel einer Group By-Klausel oder einer Group Join-Klausel gültig. Weitere Informationen und Beispiele finden Sie unter GROUP BY-Klausel (Visual Basic) und Group Join-Klausel (Visual Basic). |
LongCount |
Zählt die Anzahl der Elemente in der Auflistung. Sie können einen optionalen Boolean-Ausdruck angeben, um nur die Anzahl der Elemente in der Auflistung zu zählen, die eine Bedingung erfüllen. Gibt das Ergebnis als Long zurück. Ein Beispiel finden Sie unter der Count-Aggregatfunktion. |
Max |
Berechnet den maximalen Wert in der Auflistung, oder berechnet für alle Elemente in der Auflistung einen angegebenen Ausdruck. Beachten Sie folgendes Beispiel: |
Min |
Berechnet den minimalen Wert in der Auflistung, oder berechnet für alle Elemente in der Auflistung einen angegebenen Ausdruck. Beachten Sie folgendes Beispiel: |
Sum |
Berechnet die Summe aller Elemente in der Auflistung, oder berechnet für alle Elemente in der Auflistung einen angegebenen Ausdruck. Beachten Sie folgendes Beispiel: |
Beispiel
Im folgenden Codebeispiel wird veranschaulicht, wie die Aggregate-Klausel verwendet wird, um Aggregatfunktionen auf ein Abfrageergebnis anzuwenden.
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
Erstellen von benutzerdefinierten Aggregatfunktionen
Sie können in einem Abfrageausdruck eigene benutzerdefinierte Aggregatfunktionen verwenden, indem Sie dem IEnumerable<T>-Typ Erweiterungsmethoden hinzufügen. Die benutzerdefinierte Methode kann dann eine Berechnung oder Operation für die aufzählbare Auflistung durchführen, die auf Ihre Aggregatfunktion verweist. Weitere Informationen über Erweiterungsmethoden finden Sie unter Erweiterungsmethoden (Visual Basic).
Das folgende Codebeispiel enthält beispielsweise eine benutzerdefinierte Aggregatfunktion, die den Median einer Auflistung von Zahlen berechnet. Es gibt zwei Überladungen der Median-Erweiterungsmethode. Die erste Überladung akzeptiert als Eingabe eine Auflistung des Typs IEnumerable(Of Double). Diese Methode wird aufgerufen, wenn die Median-Aggregatfunktion für ein Abfragefeld des Typs Double aufgerufen wird. Der zweiten Überladung der Median-Methode kann ein beliebiger generischer Typ übergeben werden. Die generische Überladung der Median-Methode nimmt einen zweiten Parameter entgegen, der auf den Func(Of T, Double)-Lambdaausdruck verweist, um einen Wert für einen Typ (aus einer Auflistung) auf den entsprechenden Wert des Typs Double zu projizieren. Anschließend wird die Berechnung des Medians an die andere Überladung der Median-Methode delegiert. Weitere Informationen zu Lambdaausdrücken finden Sie unter Lambda-Ausdrücke (Visual Basic).
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
Das folgende Codebeispiel enthält Beispielabfragen, die die Median-Aggregatfunktion für eine Auflistung des Typs Integer und eine Auflistung des Typs Double aufrufen. Bei der Abfrage, die die Median-Aggregatfunktion für die Auflistung des Typs Double aufruft, wird die Überladung der Median-Methode aufgerufen, die als Eingabe eine Auflistung des Typs Double akzeptiert. Bei der Abfrage, die die Median-Aggregatfunktion für die Auflistung des Typs Integer aufruft, wird die generische Überladung der Median-Methode aufgerufen.
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
Siehe auch
Referenz
GROUP BY-Klausel (Visual Basic)
Konzepte
Einführung in LINQ in Visual Basic