Clausola Aggregate (Visual Basic)Aggregate Clause (Visual Basic)

Applica uno o più funzioni di aggregazione a una raccolta.Applies one or more aggregate functions to a collection.

SintassiSyntax

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

PartiParts

TermineTerm DefinizioneDefinition
element Obbligatorio.Required. Variabile utilizzata per scorrere gli elementi della raccolta.Variable used to iterate through the elements of the collection.
type Facoltativo.Optional. Tipo di element.The type of element. Se viene specificato alcun tipo, il tipo della element viene dedotto dal collection.If no type is specified, the type of element is inferred from collection.
collection Obbligatorio.Required. Fa riferimento alla raccolta su cui operare.Refers to the collection to operate on.
clause Facoltativo.Optional. Uno o più clausole di query, ad esempio un Where clausola, il risultato della query per applicare la clausola aggregate o le clausole per perfezionare.One or more query clauses, such as a Where clause, to refine the query result to apply the aggregate clause or clauses to.
expressionList Obbligatorio.Required. Uno o più valori delimitati da virgole espressioni che identificano una funzione di aggregazione da applicare all'insieme.One or more comma-delimited expressions that identify an aggregate function to apply to the collection. È possibile applicare un alias a una funzione di aggregazione per specificare un nome di membro per il risultato della query.You can apply an alias to an aggregate function to specify a member name for the query result. Se non viene specificato alcun alias, viene utilizzato il nome della funzione di aggregazione.If no alias is supplied, the name of the aggregate function is used. Per esempi, vedere la sezione sulle funzioni di aggregazione più avanti in questo argomento.For examples, see the section about aggregate functions later in this topic.

NoteRemarks

Il Aggregate clausola può essere utilizzata per includere le funzioni di aggregazione nelle query.The Aggregate clause can be used to include aggregate functions in your queries. Le funzioni di aggregazione eseguono verifiche e calcoli su un set di valori e restituiscono un singolo valore.Aggregate functions perform checks and computations over a set of values and return a single value. Il valore calcolato è possibile accedere utilizzando un membro del tipo di risultato della query.You can access the computed value by using a member of the query result type. Sono le funzioni di aggregazione standard che è possibile usare la All, Any, Average, Count, LongCount, Max, Min, e Sum funzioni.The standard aggregate functions that you can use are the All, Any, Average, Count, LongCount, Max, Min, and Sum functions. Queste funzioni sono note agli sviluppatori che hanno familiari con funzioni di aggregazione in SQL.These functions are familiar to developers who are familiar with aggregates in SQL. Vengono descritti nella sezione seguente di questo argomento.They are described in the following section of this topic.

Il risultato di una funzione di aggregazione è incluso nel risultato della query come un campo del tipo di risultato della query.The result of an aggregate function is included in the query result as a field of the query result type. È possibile fornire un alias per il risultato della funzione di aggregazione specificare il nome del membro del tipo di risultato della query che conterrà il valore di aggregazione.You can supply an alias for the aggregate function result to specify the name of the member of the query result type that will hold the aggregate value. Se non viene specificato alcun alias, viene utilizzato il nome della funzione di aggregazione.If no alias is supplied, the name of the aggregate function is used.

Il Aggregate clausola può iniziare una query, o può essere incluso come una clausola aggiuntiva in una query.The Aggregate clause can begin a query, or it can be included as an additional clause in a query. Se il Aggregate clausola inizia una query, il risultato è un singolo valore che rappresenta il risultato della funzione di aggregazione specificato nella Into clausola.If the Aggregate clause begins a query, the result is a single value that is the result of the aggregate function specified in the Into clause. Se è specificata più di una funzione di aggregazione nel Into clausola, la query restituisce un singolo tipo con una proprietà separata per fare riferimento al risultato di ogni funzione di aggregazione nel Into clausola.If more than one aggregate function is specified in the Into clause, the query returns a single type with a separate property to reference the result of each aggregate function in the Into clause. Se il Aggregate clausola viene inclusa come una clausola in una query, il tipo restituito nella raccolta di query avranno una proprietà separata per fare riferimento al risultato di ogni funzione di aggregazione nel Into clausola.If the Aggregate clause is included as an additional clause in a query, the type returned in the query collection will have a separate property to reference the result of each aggregate function in the Into clause.

Funzioni di aggregazioneAggregate Functions

Di seguito sono le funzioni di aggregazione standard che possono essere usate con il Aggregate clausola.The following are the standard aggregate functions that can be used with the Aggregate clause.

TuttiAll

Restituisce true se tutti gli elementi della raccolta soddisfano una condizione specificata; in caso contrario restituisce false.Returns true if all elements in the collection satisfy a specified condition; otherwise returns false. Di seguito è riportato un esempio:The following is an example:

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

QualsiasiAny

Restituisce true se ogni elemento della raccolta soddisfa una condizione specificata; in caso contrario restituisce false.Returns true if any element in the collection satisfies a specified condition; otherwise returns false. Di seguito è riportato un esempio:The following is an example:

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

MediaAverage

Calcola la media di tutti gli elementi nella raccolta, o calcola un'espressione fornita per tutti gli elementi nella raccolta.Computes the average of all elements in the collection, or computes a supplied expression for all elements in the collection. Di seguito è riportato un esempio:The following is an example:

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

ConteggioCount

Conta il numero di elementi nella raccolta.Counts the number of elements in the collection. È possibile fornire facoltativo Boolean espressione per contare solo il numero di elementi nella raccolta che soddisfano una condizione.You can supply an optional Boolean expression to count only the number of elements in the collection that satisfy a condition. Di seguito è riportato un esempio:The following is an example:

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

RaggruppaGroup

Fa riferimento ai risultati delle query che vengono raggruppati in seguito a un Group By o Group Join clausola.Refers to query results that are grouped as a result of a Group By or Group Join clause. Il Group è valida solo in funzione la Into clausola di un Group By o Group Join clausola.The Group function is valid only in the Into clause of a Group By or Group Join clause. Per altre informazioni ed esempi, vedere Group By Clause e clausola Group Join.For more information and examples, see Group By Clause and Group Join Clause.

LongCountLongCount

Conta il numero di elementi nella raccolta.Counts the number of elements in the collection. È possibile fornire facoltativo Boolean espressione per contare solo il numero di elementi nella raccolta che soddisfano una condizione.You can supply an optional Boolean expression to count only the number of elements in the collection that satisfy a condition. Restituisce il risultato come un Long.Returns the result as a Long. Per un esempio, vedere il Count funzione di aggregazione.For an example, see the Count aggregate function.

MaxMax

Calcola il valore massimo dalla raccolta, o calcola un'espressione fornita per tutti gli elementi nella raccolta.Computes the maximum value from the collection, or computes a supplied expression for all elements in the collection. Di seguito è riportato un esempio:The following is an example:

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

MinMin

Calcola il valore minimo dalla raccolta, o calcola un'espressione fornita per tutti gli elementi nella raccolta.Computes the minimum value from the collection, or computes a supplied expression for all elements in the collection. Di seguito è riportato un esempio:The following is an example:

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

SumSum

Calcola la somma di tutti gli elementi nella raccolta, o calcola un'espressione fornita per tutti gli elementi nella raccolta.Computes the sum of all elements in the collection, or computes a supplied expression for all elements in the collection. Di seguito è riportato un esempio:The following is an example:

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

EsempioExample

Nell'esempio seguente viene illustrato come utilizzare il Aggregate clausola per applicare le funzioni di aggregazione per un risultato della query.The following example shows how to use the Aggregate clause to apply aggregate functions to a query result.

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 definita dall'utenteCreating User-Defined Aggregate Functions

È possibile includere funzioni di aggregazione personalizzate in un'espressione di query mediante l'aggiunta di metodi di estensione per il IEnumerable<T> tipo.You can include your own custom aggregate functions in a query expression by adding extension methods to the IEnumerable<T> type. Il metodo personalizzato può quindi eseguire un calcolo o l'operazione sulla raccolta enumerabile che ha fatto riferimento alla funzione di aggregazione.Your custom method can then perform a calculation or operation on the enumerable collection that has referenced your aggregate function. Per altre informazioni sui metodi di estensione, vedere Metodi di estensione.For more information about extension methods, see Extension Methods.

Ad esempio, nell'esempio seguente viene illustrata una funzione di aggregazione personalizzata che calcola il valore mediano di una raccolta di numeri.For example, the following example shows a custom aggregate function that calculates the median value of a collection of numbers. Esistono due overload del Median metodo di estensione.There are two overloads of the Median extension method. Il primo overload accetta come input, una raccolta di tipo IEnumerable(Of Double).The first overload accepts, as input, a collection of type IEnumerable(Of Double). Se il Median funzione di aggregazione viene chiamata per un campo di query di tipo Double, questo metodo verrà chiamato.If the Median aggregate function is called for a query field of type Double, this method will be called. Il secondo overload del Median metodo può essere passato a qualsiasi tipo generico.The second overload of the Median method can be passed any generic type. L'overload generico del Median metodo accetta un secondo parametro che fa riferimento il Func(Of T, Double) un'espressione lambda a un valore per un tipo (da una raccolta) il progetto come il valore corrispondente di tipo Double.The generic overload of the Median method takes a second parameter that references the Func(Of T, Double) lambda expression to project a value for a type (from a collection) as the corresponding value of type Double. Il calcolo del valore mediano per l'altro overload di delega quindi la Median (metodo).It then delegates the calculation of the median value to the other overload of the Median method. Per altre informazioni sulle espressioni lambda, vedere Espressioni lambda in C++.For more information about lambda expressions, see Lambda Expressions.

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

L'esempio seguente illustra esempi di query che chiamano il Median funzione in una raccolta del tipo di aggregazione Integere una raccolta di tipo Double.The following example shows sample queries that call the Median aggregate function on a collection of type Integer, and a collection of type Double. La query che chiama il Median funzione per la raccolta del tipo di aggregazione Double chiama l'overload del metodo le Median metodo che accetta come input, una raccolta di tipo Double.The query that calls the Median aggregate function on the collection of type Double calls the overload of the Median method that accepts, as input, a collection of type Double. La query che chiama il Median funzione per la raccolta del tipo di aggregazione Integer chiama l'overload generico del Median (metodo).The query that calls the Median aggregate function on the collection of type Integer calls the generic overload of the Median method.

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 ancheSee also