Aggregaatcomponent (Visual Basic)
Hiermee past u een of meer statistische functies toe op een verzameling.
Syntaxis
Aggregate element [As type] In collection _
[, element2 [As type2] In collection2, [...]]
[ clause ]
Into expressionList
generator
Term | Definitie |
---|---|
element |
Vereist. Variabele die wordt gebruikt om de elementen van de verzameling te herhalen. |
type |
Optioneel. Het type element . Als er geen type is opgegeven, wordt het type element afgeleid van collection . |
collection |
Vereist. Verwijst naar de verzameling waarop moet worden gewerkt. |
clause |
Optioneel. Een of meer queryclausules, zoals een Where component, om het queryresultaat te verfijnen om de statistische component of componenten toe te passen. |
expressionList |
Vereist. Een of meer door komma's gescheiden expressies waarmee een statistische functie wordt geïdentificeerd die moet worden toegepast op de verzameling. U kunt een alias toepassen op een statistische functie om een lidnaam op te geven voor het queryresultaat. Als er geen alias wordt opgegeven, wordt de naam van de statistische functie gebruikt. Zie de sectie over statistische functies verderop in dit onderwerp voor voorbeelden. |
Opmerkingen
De Aggregate
component kan worden gebruikt om statistische functies in uw query's op te nemen. Statistische functies voeren controles en berekeningen uit op een set waarden en retourneren één waarde. U kunt de berekende waarde openen met behulp van een lid van het queryresultaattype. De standaard statistische functies die u kunt gebruiken, zijn de All
functies , , Any
, Count
Average
, LongCount
, Max
, en Min
Sum
functies. Deze functies zijn bekend bij ontwikkelaars die bekend zijn met aggregaties in SQL. Ze worden beschreven in de volgende sectie van dit onderwerp.
Het resultaat van een statistische functie wordt opgenomen in het queryresultaat als een veld van het queryresultaattype. U kunt een alias opgeven voor het resultaat van de statistische functie om de naam op te geven van het lid van het queryresultaattype dat de statistische waarde bevat. Als er geen alias wordt opgegeven, wordt de naam van de statistische functie gebruikt.
De Aggregate
component kan beginnen met een query of kan worden opgenomen als een extra component in een query. Als de Aggregate
component een query begint, is het resultaat één waarde die het resultaat is van de statistische functie die is opgegeven in de Into
component. Als er meer dan één statistische functie is opgegeven in de Into
component, retourneert de query één type met een afzonderlijke eigenschap om te verwijzen naar het resultaat van elke statistische functie in de Into
component. Als de Aggregate
component is opgenomen als een extra component in een query, heeft het type dat wordt geretourneerd in de queryverzameling een afzonderlijke eigenschap om te verwijzen naar het resultaat van elke statistische functie in de Into
component.
Statische functies
Hier volgen de standaard statistische functies die kunnen worden gebruikt met de Aggregate
component.
Alle
Retourneert true
als alle elementen in de verzameling voldoen aan een opgegeven voorwaarde; anders wordt geretourneerd false
. Hier volgt een voorbeeld:
Dim customerList1 = Aggregate order In orders
Into AllOrdersOver100 = All(order.Total >= 100)
Alle
Retourneert true
als een element in de verzameling voldoet aan een opgegeven voorwaarde; anders wordt geretourneerd false
. Hier volgt een voorbeeld:
Dim customerList2 = From cust In customers
Aggregate order In cust.Orders
Into AnyOrderOver500 = Any(order.Total >= 500)
Gemiddeld
Berekent het gemiddelde van alle elementen in de verzameling of berekent een opgegeven expressie voor alle elementen in de verzameling. Hier volgt een voorbeeld:
Dim customerOrderAverage = Aggregate order In orders
Into Average(order.Total)
Tellen
Telt het aantal elementen in de verzameling. U kunt een optionele Boolean
expressie opgeven om alleen het aantal elementen in de verzameling te tellen waaraan een voorwaarde voldoet. Hier volgt een voorbeeld:
Dim customerOrderAfter1996 = From cust In customers
Aggregate order In cust.Orders
Into Count(order.OrderDate > #12/31/1996#)
Groep
Verwijst naar queryresultaten die zijn gegroepeerd als gevolg van een Group By
of Group Join
component. De Group
functie is alleen geldig in de Into
component van een Group By
of Group Join
component. Zie Group By Clause en Group Join Clause voor meer informatie en voorbeelden.
LongCount
Telt het aantal elementen in de verzameling. U kunt een optionele Boolean
expressie opgeven om alleen het aantal elementen in de verzameling te tellen waaraan een voorwaarde voldoet. Retourneert het resultaat als een Long
. Zie de Count
statistische functie voor een voorbeeld.
Max
Berekent de maximumwaarde van de verzameling of berekent een opgegeven expressie voor alle elementen in de verzameling. Hier volgt een voorbeeld:
Dim customerMaxOrder = Aggregate order In orders
Into MaxOrder = Max(order.Total)
Min
Berekent de minimumwaarde van de verzameling of berekent een opgegeven expressie voor alle elementen in de verzameling. Hier volgt een voorbeeld:
Dim customerMinOrder = From cust In customers
Aggregate order In cust.Orders
Into MinOrder = Min(order.Total)
Sum
Berekent de som van alle elementen in de verzameling of berekent een opgegeven expressie voor alle elementen in de verzameling. Hier volgt een voorbeeld:
Dim customerTotals = From cust In customers
Aggregate order In cust.Orders
Into Sum(order.Total)
Opmerking
In het volgende voorbeeld ziet u hoe u de Aggregate
component gebruikt om statistische functies toe te passen op een queryresultaat.
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
Door de gebruiker gedefinieerde statistische functies maken
U kunt uw eigen aangepaste statistische functies opnemen in een query-expressie door extensiemethoden toe te voegen aan het IEnumerable<T> type. Uw aangepaste methode kan vervolgens een berekening of bewerking uitvoeren op de inventariserbare verzameling waarnaar wordt verwezen met uw statistische functie. Zie Extensiemethoden voor meer informatie over extensiemethoden.
In het volgende voorbeeld ziet u bijvoorbeeld een aangepaste statistische functie waarmee de mediaanwaarde van een verzameling getallen wordt berekend. Er zijn twee overbelastingen van de Median
extensiemethode. De eerste overbelasting accepteert, als invoer, een verzameling van het type IEnumerable(Of Double)
. Als de Median
statistische functie wordt aangeroepen voor een queryveld van het type Double
, wordt deze methode aangeroepen. De tweede overbelasting van de Median
methode kan elk algemeen type worden doorgegeven. De algemene overbelasting van de Median
methode gebruikt een tweede parameter die verwijst naar de Func(Of T, Double)
lambda-expressie om een waarde voor een type (uit een verzameling) te projecteren als de bijbehorende waarde van het type Double
. Vervolgens wordt de berekening van de mediaanwaarde gedelegeerd aan de andere overbelasting van de Median
methode. Zie Lambda-expressies voor meer informatie over lambda-expressies.
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
In het volgende voorbeeld ziet u voorbeeldquery's die de Median
statistische functie aanroepen voor een verzameling van het type Integer
en een verzameling van het type Double
. De query die de Median
statistische functie aanroept voor de verzameling van het type Double
roept de overbelasting aan van de Median
methode die, als invoer, een verzameling van het type Double
accepteert. De query die de Median
statistische functie aanroept voor de verzameling van het type Integer
roept de algemene overbelasting van de Median
methode aan.
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