Share via


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 Allfuncties , , Any, CountAverage, LongCount, Max, en MinSum 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 Integeren 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 Doubleaccepteert. 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

Zie ook