Clausola Aggregate (Visual Basic)

Applica uno o più funzioni di aggregazione a un insieme.

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

Parti

Argomento

Definizione

element

Obbligatoria. Variabile utilizzata per scorrere gli elementi dell'insieme.

type

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

collection

Obbligatorio. Fa riferimento all'insieme su cui eseguire l'operazione.

clause

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 all'insieme. È 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 nell'insieme 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

Oggetto di descrizione

All

Restituisce true se tutti gli elementi nell'insieme soddisfanno una condizione specificata; in caso contrario restituiscefalse. Di seguito è riportato un esempio:

Any

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

Average

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

Count

Conta il numero di elementi nell'insieme. È possibile fornire un'espressione Boolean facoltativa per contare solo il numero di elementi nell'insieme 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 Join La funzione Group è valida solo nella clausola Into di una clausola Group ByGroup Join Per ulteriori informazioni ed esempi, vedere Clausola Group By (Visual Basic) e Clausola Group Join (Visual Basic).

LongCount

Conta il numero di elementi nell'insieme. È possibile fornire un'espressione Boolean facoltativa per contare solo il numero di elementi nell'insieme 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 dell'insieme oppure calcola un'espressione fornita per tutti gli elementi dell'insieme. Di seguito è riportato un esempio:

Min

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

Sum

Calcola la somma di tutti gli elementi nell'insieme oppure calcola un'espressione fornita per tutti gli elementi dell'insieme. 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 sull'insieme 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 un insieme di numeri. Esistono due overload del metodo di estensione Median: Il primo overload accetta come input un insieme 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 un insieme) 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 un insieme di tipo Integer e un insieme di tipo Double. La query che chiama la funzione di aggregazione Median sull'insieme di tipo Double chiama l'overload del metodo Median che accetta come input un insieme di tipo Double. La query che chiama la funzione di aggregazione Median sull'insieme 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)