Dela via


Aggregeringssats (Visual Basic)

Tillämpar en eller flera aggregeringsfunktioner på en samling.

Syntax

Aggregate element [As type] In collection _  
  [, element2 [As type2] In collection2, [...]]  
  [ clause ]  
  Into expressionList  

Delar

Period Definition
element Obligatoriska. Variabel som används för att iterera genom elementen i samlingen.
type Valfritt. Typen av element. Om ingen typ anges härleds typen av element från collection.
collection Obligatoriska. Refererar till samlingen som ska användas.
clause Valfritt. En eller flera frågesatser, till exempel en Where sats, för att förfina frågeresultatet för att tillämpa aggregeringssatsen eller -satserna på.
expressionList Obligatoriska. Ett eller flera kommaavgränsade uttryck som identifierar en mängdfunktion som ska tillämpas på samlingen. Du kan använda ett alias för en mängdfunktion för att ange ett medlemsnamn för frågeresultatet. Om inget alias anges används namnet på aggregeringsfunktionen. Exempel finns i avsnittet om mängdfunktioner senare i det här avsnittet.

Kommentarer

Satsen Aggregate kan användas för att inkludera aggregerade funktioner i dina frågor. Aggregerade funktioner utför kontroller och beräkningar över en uppsättning värden och returnerar ett enda värde. Du kan komma åt det beräknade värdet med hjälp av en medlem av frågeresultattypen. Standard aggregeringsfunktionerna som du kan använda är Allfunktionerna , Any, Average, Count, LongCount, Max, Minoch Sum . Dessa funktioner är bekanta för utvecklare som är bekanta med aggregeringar i SQL. De beskrivs i följande avsnitt i det här avsnittet.

Resultatet av en mängdfunktion ingår i frågeresultatet som ett fält av frågeresultattypen. Du kan ange ett alias för det aggregerade funktionsresultatet för att ange namnet på medlemmen i frågeresultattypen som ska innehålla det aggregerade värdet. Om inget alias anges används namnet på aggregeringsfunktionen.

- Aggregate satsen kan starta en fråga, eller så kan den inkluderas som en ytterligare sats i en fråga. Aggregate Om satsen startar en fråga är resultatet ett enda värde som är resultatet av den mängdfunktion som anges i Into -satsen. Om mer än en mängdfunktion anges i Into -satsen returnerar frågan en enskild typ med en separat egenskap för att referera till resultatet av varje mängdfunktion i Into -satsen. Aggregate Om satsen ingår som en ytterligare sats i en fråga har den typ som returneras i frågesamlingen en separat egenskap som refererar till resultatet av varje mängdfunktion i Into -satsen.

Mängdfunktioner

Följande är standardaggregatfunktionerna som kan användas med Aggregate -satsen.

Alla

Returnerar true om alla element i samlingen uppfyller ett angivet villkor. Annars returneras false. Följande utgör ett exempel:

Dim customerList1 = Aggregate order In orders
                    Into AllOrdersOver100 = All(order.Total >= 100)

Alla

Returnerar true om något element i samlingen uppfyller ett angivet villkor. Annars returneras false. Följande utgör ett exempel:

Dim customerList2 = From cust In customers
                    Aggregate order In cust.Orders
                    Into AnyOrderOver500 = Any(order.Total >= 500)

Genomsnitt

Beräknar medelvärdet av alla element i samlingen eller beräknar ett angivet uttryck för alla element i samlingen. Följande utgör ett exempel:

Dim customerOrderAverage = Aggregate order In orders
                           Into Average(order.Total)

Antal

Räknar antalet element i samlingen. Du kan ange ett valfritt Boolean uttryck för att bara räkna antalet element i samlingen som uppfyller ett villkor. Följande utgör ett exempel:

Dim customerOrderAfter1996 = From cust In customers
                             Aggregate order In cust.Orders
                             Into Count(order.OrderDate > #12/31/1996#)

Grupp

Refererar till frågeresultat som grupperas som ett resultat av en eller Group Join -Group Bysats. Funktionen Group är endast giltig i satsen i Into en Group By eller Group Join -sats. Mer information och exempel finns i Gruppera efter-satsen och Gruppkopplingsklausul.

LongCount

Räknar antalet element i samlingen. Du kan ange ett valfritt Boolean uttryck för att bara räkna antalet element i samlingen som uppfyller ett villkor. Returnerar resultatet som en Long. Ett exempel finns i aggregeringsfunktionen Count .

Max

Beräknar det maximala värdet från samlingen eller beräknar ett angivet uttryck för alla element i samlingen. Följande utgör ett exempel:

Dim customerMaxOrder = Aggregate order In orders
                       Into MaxOrder = Max(order.Total)

Min

Beräknar det minsta värdet från samlingen eller beräknar ett angivet uttryck för alla element i samlingen. Följande utgör ett exempel:

Dim customerMinOrder = From cust In customers
                       Aggregate order In cust.Orders
                       Into MinOrder = Min(order.Total)

Sum

Beräknar summan av alla element i samlingen eller beräknar ett angivet uttryck för alla element i samlingen. Följande utgör ett exempel:

Dim customerTotals = From cust In customers
                     Aggregate order In cust.Orders
                     Into Sum(order.Total)

Exempel

I följande exempel visas hur du använder Aggregate -satsen för att tillämpa aggregerade funktioner på ett frågeresultat.

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

Skapa användardefinierade aggregeringsfunktioner

Du kan inkludera dina egna anpassade aggregeringsfunktioner i ett frågeuttryck genom att lägga till tilläggsmetoder i IEnumerable<T> typen. Din anpassade metod kan sedan utföra en beräkning eller åtgärd på den uppräkningsbara samling som har refererat till din mängdfunktion. Mer information om tilläggsmetoder finns i Tilläggsmetoder.

I följande exempel visas till exempel en anpassad mängdfunktion som beräknar medianvärdet för en samling tal. Det finns två överlagringar av Median tilläggsmetoden. Den första överlagringen accepterar, som indata, en samling av typen IEnumerable(Of Double). Om aggregeringsfunktionen Median anropas för ett frågefält av typen Doubleanropas den här metoden. Den andra överlagringen av Median metoden kan skickas vilken allmän typ som helst. Den allmänna överlagringen Median av metoden tar en andra parameter som refererar Func(Of T, Double) till lambda-uttrycket för att projicera ett värde för en typ (från en samling) som motsvarande värde av typen Double. Sedan delegeras beräkningen av medianvärdet till den andra överlagringen Median av metoden. Mer information om lambda-uttryck finns i Lambda-uttryck.

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

I följande exempel visas exempelfrågor som anropar aggregeringsfunktionen Median på en samling av typen Integeroch en samling av typen Double. Frågan som anropar aggregeringsfunktionen Median i samlingen av typen Double anropar överlagringen av metoden Median som som indata accepterar en samling av typen Double. Frågan som anropar aggregeringsfunktionen Median i samlingen av typen Integer anropar den allmänna överbelastningen av Median metoden.

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

Se även