Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wendet eine oder mehrere Aggregatfunktionen auf eine Auflistung an.
Syntax
Aggregate element [As type] In collection _
[, element2 [As type2] In collection2, [...]]
[ clause ]
Into expressionList
Bestandteile
| Begriff | Definition |
|---|---|
element |
Erforderlich. Variable, die zum Durchlaufen der Elemente der Auflistung verwendet wird. |
type |
Wahlfrei. Der element-Typ. Wenn kein Typ angegeben ist, wird der Typ von elementcollection. |
collection |
Erforderlich. Bezieht sich auf die Auflistung, die ausgeführt werden soll. |
clause |
Wahlfrei. Eine oder mehrere Abfrageklauseln, z. B. eine Where Klausel, um das Abfrageergebnis zu verfeinern, um die Aggregatklausel oder -klauseln anzuwenden. |
expressionList |
Erforderlich. Mindestens ein durch Trennzeichen getrennte Ausdrücke, die eine Aggregatfunktion identifizieren, die auf die Auflistung angewendet werden soll. Sie können einen Alias auf eine Aggregatfunktion anwenden, um einen Membernamen für das Abfrageergebnis anzugeben. Wenn kein Alias angegeben wird, wird der Name der Aggregatfunktion verwendet. Beispiele finden Sie im Abschnitt zu Aggregatfunktionen weiter unten in diesem Thema. |
Bemerkungen
Die Aggregate Klausel kann verwendet werden, um Aggregatfunktionen in Ihre Abfragen einzuschließen. Aggregatfunktionen führen Überprüfungen und Berechnungen über eine Gruppe von Werten aus und geben einen einzelnen Wert zurück. Sie können auf den berechneten Wert zugreifen, indem Sie ein Element des Abfrageergebnistyps verwenden. Die standardmäßigen Aggregatfunktionen, die Sie verwenden können, sind die All, Any, , Average, Count, LongCount, Maxund MinSum Funktionen. Diese Funktionen sind Entwicklern vertraut, die mit Aggregaten in SQL vertraut sind. Sie werden im folgenden Abschnitt dieses Themas beschrieben.
Das Ergebnis einer Aggregatfunktion ist im Abfrageergebnis als Feld des Abfrageergebnistyps enthalten. Sie können einen Alias für das Ergebnis der Aggregatfunktion angeben, um den Namen des Elements des Abfrageergebnistyps anzugeben, der den Aggregatwert enthält. Wenn kein Alias angegeben wird, wird der Name der Aggregatfunktion verwendet.
Die Aggregate Klausel kann eine Abfrage beginnen oder als zusätzliche Klausel in eine Abfrage eingeschlossen werden. Wenn die Aggregate Klausel eine Abfrage beginnt, ist das Ergebnis ein einzelner Wert, der das Ergebnis der in der Into Klausel angegebenen Aggregatfunktion ist. Wenn mehr als eine Aggregatfunktion in der Into Klausel angegeben wird, gibt die Abfrage einen einzelnen Typ mit einer separaten Eigenschaft zurück, um auf das Ergebnis jeder Aggregatfunktion in der Into Klausel zu verweisen. Wenn die Aggregate Klausel als zusätzliche Klausel in einer Abfrage enthalten ist, verfügt der in der Abfrageauflistung zurückgegebene Typ über eine separate Eigenschaft, um auf das Ergebnis jeder Aggregatfunktion in der Into Klausel zu verweisen.
Aggregatfunktionen
Im Folgenden finden Sie die Standardaggregatfunktionen, die mit der Aggregate Klausel verwendet werden können.
Alle
Gibt zurück true , wenn alle Elemente in der Auflistung eine angegebene Bedingung erfüllen; andernfalls wird zurückgegeben false. Es folgt ein Beispiel:
Dim customerList1 = Aggregate order In orders
Into AllOrdersOver100 = All(order.Total >= 100)
Beliebig
Gibt zurück true , wenn ein beliebiges Element in der Auflistung eine angegebene Bedingung erfüllt; andernfalls wird zurückgegeben false. Es folgt ein Beispiel:
Dim customerList2 = From cust In customers
Aggregate order In cust.Orders
Into AnyOrderOver500 = Any(order.Total >= 500)
Durchschnitt
Berechnet den Mittelwert aller Elemente in der Auflistung oder berechnet einen bereitgestellten Ausdruck für alle Elemente in der Auflistung. Es folgt ein Beispiel:
Dim customerOrderAverage = Aggregate order In orders
Into Average(order.Total)
Anzahl
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. Es folgt ein Beispiel:
Dim customerOrderAfter1996 = From cust In customers
Aggregate order In cust.Orders
Into Count(order.OrderDate > #12/31/1996#)
Gruppe
Bezieht sich auf Abfrageergebnisse, die als Ergebnis einer Group By Oder-Klausel Group Join gruppiert sind. Die Group Funktion ist nur in der Into Klausel eines oder Group Join einer Group By Klausel gültig. Weitere Informationen und Beispiele finden Sie unter Group By Clause und Group Join Clause.
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 ein Long. Ein Beispiel finden Sie in der Count Aggregatfunktion.
Max.
Berechnet den Maximalwert aus der Auflistung oder berechnet einen bereitgestellten Ausdruck für alle Elemente in der Auflistung. Es folgt ein Beispiel:
Dim customerMaxOrder = Aggregate order In orders
Into MaxOrder = Max(order.Total)
Min
Berechnet den Minimalwert aus der Auflistung oder berechnet einen angegebenen Ausdruck für alle Elemente in der Auflistung. Es folgt ein Beispiel:
Dim customerMinOrder = From cust In customers
Aggregate order In cust.Orders
Into MinOrder = Min(order.Total)
Summe
Berechnet die Summe aller Elemente in der Auflistung oder berechnet einen bereitgestellten Ausdruck für alle Elemente in der Auflistung. Es folgt ein Beispiel:
Dim customerTotals = From cust In customers
Aggregate order In cust.Orders
Into Sum(order.Total)
Beispiel
Das folgende Beispiel zeigt, wie Sie die Aggregate Klausel verwenden, 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 User-Defined Aggregatfunktionen
Sie können eigene benutzerdefinierte Aggregatfunktionen in einen Abfrageausdruck einschließen, indem Sie dem IEnumerable<T> Typ Erweiterungsmethoden hinzufügen. Ihre benutzerdefinierte Methode kann dann eine Berechnung oder einen Vorgang für die aufzählbare Auflistung ausführen, auf die die Aggregatfunktion verwiesen wurde. Weitere Informationen zu Erweiterungsmethoden finden Sie unter Extension Methods (Erweiterungsmethoden).
Das folgende Beispiel zeigt beispielsweise eine benutzerdefinierte Aggregatfunktion, die den Medianwert einer Auflistung von Zahlen berechnet. Es gibt zwei Überladungen der Median Erweiterungsmethode. Die erste Überladung akzeptiert als Eingabe eine Sammlung vom Typ IEnumerable(Of Double). Wenn die Median Aggregatfunktion für ein Abfragefeld vom Typ Doubleaufgerufen wird, wird diese Methode aufgerufen. Die zweite Überladung der Median Methode kann einen beliebigen generischen Typ übergeben werden. Die generische Überladung der Median Methode verwendet einen zweiten Parameter, der auf den Func(Of T, Double) Lambda-Ausdruck verweist, um einen Wert für einen Typ (aus einer Auflistung) als entsprechenden Wert des Typs Doublezu projizieren. Anschließend wird die Berechnung des Medianwerts an die andere Überladung der Median Methode delegiert. Weitere Informationen zu Lambda-Ausdrücken finden Sie unter Lambda-Ausdrücke.
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 Beispiel zeigt Beispielabfragen, die die Median Aggregatfunktion für eine Sammlung vom Typ Integeraufrufen, und eine Auflistung vom Typ Double. Die Abfrage, die die Median Aggregatfunktion für die Sammlung des Typs Double aufruft, ruft die Überladung der Methode auf, die Median als Eingabe eine Sammlung vom Typ Doubleakzeptiert. Die Abfrage, die die Median Aggregatfunktion für die Sammlung des Typs Integer aufruft, ruft die generische Überladung der Median Methode auf.
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