Clausola Aggregate (Visual Basic)

Applica uno o più funzioni di aggregazione a una raccolta di elementi.

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

Parti

Termine

Definizione

element

Obbligatorio.Variabile utilizzata per scorrere gli elementi della raccolta.

type

Parametro facoltativo.Tipo di element.Se non è specificato, il tipo di element viene dedotto da collection.

collection

Obbligatorio.Fa riferimento alla raccolta su cui eseguire l'operazione.

clause

Parametro facoltativo.Uno o più clausole query, ad esempio una clausola Where, per perfezionare il risultato della query a cui applicare la clausola o le clausole di aggregazione.

expressionList

Obbligatorio.Uno o espressioni più delimitate da virgole che identificano una funzione di aggregazione da applicare alla raccolta.È possibile applicare un alias a una funzione di aggregazione per specificare un nome di membro per il risultato della query.Se non viene fornito alcun alias, viene utilizzato il nome della funzione di aggregazione.Per i relativi esempi, vedere la sezione dedicata alle funzioni di aggregazione più avanti in questo argomento.

Note

La clausola Aggregate può essere utilizzata per includere nelle query funzioni di aggregazione.Le funzioni di aggregazione eseguono controlli e calcoli su un insieme di valori e restituiscono un solo valore.È possibile accedere al valore calcolato utilizzando un membro del tipo di risultato della query.Le funzioni di aggregazione standard che possono venire utilizzate sono le funzioni All, Any, Average, Count, LongCount, Max, Min e Sum.Queste funzioni sono note agli sviluppatori che utilizzano comunemente le aggregazioni in SQL.Vengono descritte nelle sezioni seguenti di questo argomento.

Il risultato di una funzione di aggregazione viene incluso nel risultato della query come un campo del tipo di risultato della query.È possibile fornire un alias affinché il risultato della funzione di aggregazione specifichi il nome di membro del tipo di risultato della query che conterrà il valore di aggregazione.Se non viene fornito alcun alias, viene utilizzato il nome della funzione di aggregazione.

La clausola Aggregate può iniziare una query, o può essere inclusa come una clausola aggiuntiva in una query.Se la clausola Aggregate inizia una query, il risultato è un solo valore che è il risultato della funzione di aggregazione specificato nella clausola Into.Se viene specificata più di una funzione di aggregazione nella clausola Into, la query restituisce un solo tipo con una proprietà separata per fare riferimento al risultato di ogni funzione di aggregazione nella clausola Into.Se la clausola Aggregate viene inclusa come clausola aggiuntiva in una query, il tipo restituito nella raccolta della query avrà una proprietà separata per fare riferimento al risultato di ogni funzione di aggregazione nella clausola Into.

Funzioni di aggregazione

Nell'elenco seguente vengono descritte le funzioni di aggregazione standard che possono essere utilizzate con la clausola Aggregate.

Funzione

Descrizione

All

Restituisce true se tutti gli elementi nella raccolta soddisfano una condizione specificata; in caso contrario restituiscefalse.Di seguito è riportato un esempio:

Any

Restituisce true se ogni elemento nella raccolta soddisfa una condizione specificata; in caso contrario restituiscefalse.Di seguito è riportato un esempio:

Average

Calcola la media di tutti gli elementi nella raccolta oppure calcola l'espressione fornita per tutti gli elementi nella raccolta.Di seguito è riportato un esempio:

Count

Conta il numero di elementi nella raccolta.È possibile fornire un'espressione Boolean facoltativa per contare solo il numero di elementi nella raccolta che soddisfano una condizione.Di seguito è riportato un esempio:

Group

Fa riferimento ai risultati della query raggruppati come risultato di una clausola Group By o Group JoinLa funzione Group è valida solo nella clausola Into di una clausola Group ByGroup JoinPer ulteriori informazioni ed esempi, vedere Clausola Group By (Visual Basic) e Clausola Group Join (Visual Basic).

LongCount

Conta il numero di elementi nella raccolta.È possibile fornire un'espressione Boolean facoltativa per contare solo il numero di elementi nella raccolta che soddisfano una condizione.Restituisce il risultato sotto forma di Long.Per un esempio, vedere la funzione di aggregazione Count.

Max

Calcola il valore massimo della raccolta oppure calcola un'espressione fornita per tutti gli elementi della raccolta.Di seguito è riportato un esempio:

Min

Calcola il valore minimo della raccolta oppure calcola un'espressione fornita per tutti gli elementi della raccolta.Di seguito è riportato un esempio:

Sum

Calcola la somma di tutti gli elementi nella raccolta oppure calcola un'espressione fornita per tutti gli elementi della raccolta.Di seguito è riportato un esempio:

Esempio

Nell'esempio di codice seguente viene illustrato come utilizzare la clausola Aggregate per applicare funzioni di aggregazione a un risultato della query.

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

Creazione di funzioni di aggregazione definite dall'utente

È possibile includere funzioni di aggregazione personalizzate in un'espressione di query aggiungendo metodi di estensione al tipo IEnumerable<T>.Il metodo personalizzato può quindi eseguire un calcolo o un'operazione sulla raccolta enumerabile che ha fatto riferimento alla funzione di aggregazione.Per ulteriori informazioni sui metodi di estensione, vedere Metodi di estensione (Visual Basic).

Nell'esempio di codice riportato di seguito viene illustrata una funzione di aggregazione personalizzata che calcola il valore mediano di una raccolta di numeri.Esistono due overload del metodo di estensione Median:Il primo overload accetta come input una raccolta di tipo IEnumerable(Of Double).Se la funzione di aggregazione Median viene chiamata un campo della query di tipo Double, verrà chiamato questo metodo.Il secondo overload del metodo Median può passare qualsiasi tipo generico.L'overload generico del metodo Median prende un secondo parametro che fa riferimento all'espressione lambda Func(Of T, Double) per proiettare un valore per un tipo (da una raccolta) come valore corrispondente di tipo Double.Delega quindi il calcolo del valore mediano all'altro overload del metodo Median.Per ulteriori informazioni sulle espressioni lambda, vedere Espressioni lambda (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

Nell'esempio di codice seguente vengono illustrate query che chiamano la funzione di aggregazione Median su una raccolta di tipo Integer e una raccolta di tipo Double.La query che chiama la funzione di aggregazione Median sulla raccolta di tipo Double chiama l'overload del metodo Median che accetta come input una raccolta di tipo Double.La query che chiama la funzione di aggregazione Median sulla raccolta di tipo Integer chiama l'overload generico del metodo Median.

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

Vedere anche

Riferimenti

Clausola Select (Visual Basic)

Clausola From (Visual Basic)

Clausola Where (Visual Basic)

Clausola Group By (Visual Basic)

Concetti

Introduzione a LINQ in Visual Basic

Altre risorse

Query (Visual Basic)