Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Applica una o più funzioni di aggregazione a una raccolta.
Sintassi
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 |
Opzionale. Tipo di element. Se non viene specificato alcun tipo, il tipo di element viene dedotto da collection. |
collection |
Obbligatorio. Fa riferimento alla raccolta su cui operare. |
clause |
Opzionale. Una o più clausole di query, ad esempio una Where clausola, per perfezionare il risultato della query per applicare la clausola o le clausole di aggregazione a . |
expressionList |
Obbligatorio. Una o più espressioni 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 membro per il risultato della query. Se non viene specificato alcun alias, viene usato il nome della funzione di aggregazione. Per esempi, vedere la sezione sulle funzioni di aggregazione più avanti in questo argomento. |
Osservazioni:
La Aggregate clausola può essere usata per includere funzioni di aggregazione nelle query. Le funzioni di aggregazione eseguono controlli e calcoli su un set di valori e restituiscono un singolo valore. È possibile accedere al valore calcolato usando un membro del tipo di risultato della query. Le funzioni di aggregazione standard che è possibile usare sono le Allfunzioni , AnyAverage, , MaxLongCountCount, , Min, e .Sum Queste funzioni hanno familiarità con gli sviluppatori che hanno familiarità con le aggregazioni in SQL. Sono descritte nella sezione seguente di questo argomento.
Il risultato di una funzione di aggregazione viene incluso nel risultato della query come campo del tipo di risultato della query. È possibile specificare un alias per il risultato della funzione di aggregazione per specificare il nome del membro del tipo di risultato della query che conterrà il valore aggregato. Se non viene specificato alcun alias, viene usato il nome della funzione di aggregazione.
La Aggregate clausola può iniziare una query oppure può essere inclusa come clausola aggiuntiva in una query. Se la Aggregate clausola inizia una query, il risultato è un singolo valore risultante dalla funzione di aggregazione specificata nella Into clausola . Se nella Into clausola vengono specificate più funzioni di aggregazione, la query restituisce un singolo tipo con una proprietà separata per fare riferimento al risultato di ogni funzione di aggregazione nella Into clausola . Se la Aggregate clausola viene inclusa come clausola aggiuntiva in una query, il tipo restituito nella raccolta di query avrà una proprietà separata per fare riferimento al risultato di ogni funzione di aggregazione nella Into clausola .
Funzioni di aggregazione
Di seguito sono riportate le funzioni di aggregazione standard che possono essere usate con la Aggregate clausola .
Tutti
Restituisce true se tutti gli elementi dell'insieme soddisfano una condizione specificata; in caso contrario, restituisce false. Di seguito è riportato un esempio:
Dim customerList1 = Aggregate order In orders
Into AllOrdersOver100 = All(order.Total >= 100)
Qualunque
Restituisce true se un elemento dell'insieme soddisfa una condizione specificata; in caso contrario, restituisce false. Di seguito è riportato un esempio:
Dim customerList2 = From cust In customers
Aggregate order In cust.Orders
Into AnyOrderOver500 = Any(order.Total >= 500)
Medio
Calcola la media di tutti gli elementi nella raccolta o calcola un'espressione fornita per tutti gli elementi della raccolta. Di seguito è riportato un esempio:
Dim customerOrderAverage = Aggregate order In orders
Into Average(order.Total)
Conteggio
Conta il numero di elementi nella raccolta. È possibile fornire un'espressione facoltativa per contare solo il numero di elementi nella raccolta che soddisfano Boolean una condizione. Di seguito è riportato un esempio:
Dim customerOrderAfter1996 = From cust In customers
Aggregate order In cust.Orders
Into Count(order.OrderDate > #12/31/1996#)
Gruppo
Fa riferimento ai risultati della query raggruppati come risultato di una Group By clausola o Group Join . La Group funzione è valida solo nella Into clausola di una Group By clausola o Group Join . Per altre informazioni ed esempi, vedere Clausola Group By e Clausola Group Join.
LongCount
Conta il numero di elementi nella raccolta. È possibile fornire un'espressione facoltativa per contare solo il numero di elementi nella raccolta che soddisfano Boolean una condizione. Restituisce il risultato come .Long Per un esempio, vedere la Count funzione di aggregazione.
Max
Calcola il valore massimo dalla raccolta o calcola un'espressione fornita per tutti gli elementi della raccolta. Di seguito è riportato un esempio:
Dim customerMaxOrder = Aggregate order In orders
Into MaxOrder = Max(order.Total)
Minuti
Calcola il valore minimo dalla raccolta o calcola un'espressione fornita per tutti gli elementi della raccolta. Di seguito è riportato un esempio:
Dim customerMinOrder = From cust In customers
Aggregate order In cust.Orders
Into MinOrder = Min(order.Total)
Somma
Calcola la somma di tutti gli elementi nella raccolta o calcola un'espressione fornita per tutti gli elementi della raccolta. Di seguito è riportato un esempio:
Dim customerTotals = From cust In customers
Aggregate order In cust.Orders
Into Sum(order.Total)
Esempio
Nell'esempio seguente viene illustrato come usare la Aggregate clausola 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 User-Defined
È possibile includere funzioni di aggregazione personalizzate in un'espressione di query aggiungendo metodi di estensione al IEnumerable<T> tipo. Il metodo personalizzato può quindi eseguire un calcolo o un'operazione sulla raccolta enumerabile che ha fatto riferimento alla funzione di aggregazione. Per altre informazioni sui metodi di estensione, vedere Metodi di estensione.
Nell'esempio seguente viene ad esempio illustrata una funzione di aggregazione personalizzata che calcola il valore mediano di una raccolta di numeri. Esistono due overload del Median metodo di estensione. Il primo overload accetta, come input, una raccolta di tipo IEnumerable(Of Double). Se la Median funzione di aggregazione viene chiamata per un campo di query di tipo Double, questo metodo verrà chiamato. Il secondo overload del Median metodo può essere passato a qualsiasi tipo generico. L'overload generico del Median metodo accetta un secondo parametro che fa riferimento all'espressione Func(Of T, Double) lambda 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 Median metodo . Per altre informazioni sulle espressioni lambda, vedere Espressioni lambda.
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 seguente vengono illustrate query di esempio che chiamano la Median funzione di aggregazione su una raccolta di tipo Integere una raccolta di tipo Double. La query che chiama la Median funzione di aggregazione nella raccolta di tipo Double chiama l'overload del Median metodo che accetta, come input, una raccolta di tipo Double. La query che chiama la Median funzione di aggregazione nella raccolta di tipo Integer chiama l'overload generico del Median metodo .
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