Aggregate, clause (Visual Basic)Aggregate Clause (Visual Basic)

Applique une ou plusieurs fonctions d’agrégation à une collection.Applies one or more aggregate functions to a collection.

SyntaxeSyntax

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

ÉlémentsParts

TermeTerm DéfinitionDefinition
element Obligatoire.Required. Variable utilisée pour itérer au sein des éléments de la collection.Variable used to iterate through the elements of the collection.
type Facultatif.Optional. Type d'élément element.The type of element. Si aucun type n’est spécifié, le type de element est déduit à partir de collection .If no type is specified, the type of element is inferred from collection.
collection Obligatoire.Required. Fait référence à la collection sur laquelle opérer.Refers to the collection to operate on.
clause Facultatif.Optional. Une ou plusieurs clauses de requête, telles qu’une Where clause, pour affiner le résultat de la requête afin d’appliquer la ou les clauses d’agrégation à.One or more query clauses, such as a Where clause, to refine the query result to apply the aggregate clause or clauses to.
expressionList Obligatoire.Required. Une ou plusieurs expressions délimitées par des virgules qui identifient une fonction d’agrégation à appliquer à la collection.One or more comma-delimited expressions that identify an aggregate function to apply to the collection. Vous pouvez appliquer un alias à une fonction d’agrégation pour spécifier un nom de membre pour le résultat de la requête.You can apply an alias to an aggregate function to specify a member name for the query result. Si aucun alias n’est fourni, le nom de la fonction d’agrégation est utilisé.If no alias is supplied, the name of the aggregate function is used. Pour obtenir des exemples, consultez la section relative aux fonctions d’agrégation plus loin dans cette rubrique.For examples, see the section about aggregate functions later in this topic.

RemarquesRemarks

La Aggregate clause peut être utilisée pour inclure des fonctions d’agrégation dans vos requêtes.The Aggregate clause can be used to include aggregate functions in your queries. Les fonctions d’agrégation effectuent des vérifications et des calculs sur un ensemble de valeurs et retournent une valeur unique.Aggregate functions perform checks and computations over a set of values and return a single value. Vous pouvez accéder à la valeur calculée à l’aide d’un membre du type de résultat de la requête.You can access the computed value by using a member of the query result type. Les fonctions d’agrégation standard que vous pouvez utiliser sont All les Any fonctions,, Average ,,,, Count LongCount Max Min et Sum .The standard aggregate functions that you can use are the All, Any, Average, Count, LongCount, Max, Min, and Sum functions. Ces fonctions sont familières aux développeurs qui sont familiarisés avec les agrégats dans SQL.These functions are familiar to developers who are familiar with aggregates in SQL. Ils sont décrits dans la section suivante de cette rubrique.They are described in the following section of this topic.

Le résultat d’une fonction d’agrégation est inclus dans le résultat de la requête en tant que champ du type de résultat de la requête.The result of an aggregate function is included in the query result as a field of the query result type. Vous pouvez fournir un alias pour le résultat de la fonction d’agrégation afin de spécifier le nom du membre du type de résultat de la requête qui contiendra la valeur d’agrégation.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. Si aucun alias n’est fourni, le nom de la fonction d’agrégation est utilisé.If no alias is supplied, the name of the aggregate function is used.

La Aggregate clause peut commencer une requête, ou elle peut être incluse en tant que clause supplémentaire dans une requête.The Aggregate clause can begin a query, or it can be included as an additional clause in a query. Si la Aggregate clause commence une requête, le résultat est une valeur unique qui est le résultat de la fonction d’agrégation spécifiée dans la Into clause.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. Si plusieurs fonctions d’agrégation sont spécifiées dans la Into clause, la requête retourne un type unique avec une propriété distincte pour référencer le résultat de chaque fonction d’agrégation dans la Into clause.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. Si la Aggregate clause est incluse en tant que clause supplémentaire dans une requête, le type retourné dans la collection de requêtes aura une propriété distincte pour référencer le résultat de chaque fonction d’agrégation dans la Into clause.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.

Fonctions d’agrégationAggregate Functions

Les fonctions d’agrégation standard qui peuvent être utilisées avec la clause sont les suivantes Aggregate .The following are the standard aggregate functions that can be used with the Aggregate clause.

TousAll

Retourne true si tous les éléments de la collection satisfont à une condition spécifiée ; sinon, retourne false .Returns true if all elements in the collection satisfy a specified condition; otherwise returns false. Par exemple :The following is an example:

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

N'importe quel(le)Any

Retourne true si un élément de la collection satisfait à une condition spécifiée ; sinon, retourne false .Returns true if any element in the collection satisfies a specified condition; otherwise returns false. Par exemple :The following is an example:

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

MoyenneAverage

Calcule la moyenne de tous les éléments de la collection ou calcule une expression fournie pour tous les éléments de la collection.Computes the average of all elements in the collection, or computes a supplied expression for all elements in the collection. Par exemple :The following is an example:

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

CountCount

Compte le nombre d’éléments dans la collection.Counts the number of elements in the collection. Vous pouvez fournir une Boolean expression facultative pour compter uniquement le nombre d’éléments de la collection qui satisfont à une condition.You can supply an optional Boolean expression to count only the number of elements in the collection that satisfy a condition. Par exemple :The following is an example:

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

GroupGroup

Fait référence aux résultats de requête regroupés à la suite d' Group By une Group Join clause ou.Refers to query results that are grouped as a result of a Group By or Group Join clause. La Group fonction est valide uniquement dans la Into clause d’une Group By Group Join clause ou.The Group function is valid only in the Into clause of a Group By or Group Join clause. Pour plus d’informations et d’exemples, consultez Group by , clause et Group join clause.For more information and examples, see Group By Clause and Group Join Clause.

LongCountLongCount

Compte le nombre d’éléments dans la collection.Counts the number of elements in the collection. Vous pouvez fournir une Boolean expression facultative pour compter uniquement le nombre d’éléments de la collection qui satisfont à une condition.You can supply an optional Boolean expression to count only the number of elements in the collection that satisfy a condition. Retourne le résultat sous forme de Long .Returns the result as a Long. Pour obtenir un exemple, consultez la Count fonction Aggregate.For an example, see the Count aggregate function.

MaxMax

Calcule la valeur maximale de la collection ou calcule une expression fournie pour tous les éléments de la collection.Computes the maximum value from the collection, or computes a supplied expression for all elements in the collection. Par exemple :The following is an example:

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

MinMin

Calcule la valeur minimale de la collection ou calcule une expression fournie pour tous les éléments de la collection.Computes the minimum value from the collection, or computes a supplied expression for all elements in the collection. Par exemple :The following is an example:

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

SumSum

Calcule la somme de tous les éléments de la collection ou calcule une expression fournie pour tous les éléments de la collection.Computes the sum of all elements in the collection, or computes a supplied expression for all elements in the collection. Par exemple :The following is an example:

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

ExempleExample

L’exemple suivant montre comment utiliser la Aggregate clause pour appliquer des fonctions d’agrégation à un résultat de requête.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

Créer des fonctions d’agrégation User-DefinedCreating User-Defined Aggregate Functions

Vous pouvez inclure vos propres fonctions d’agrégation personnalisées dans une expression de requête en ajoutant des méthodes d’extension au IEnumerable<T> type.You can include your own custom aggregate functions in a query expression by adding extension methods to the IEnumerable<T> type. Votre méthode personnalisée peut ensuite effectuer un calcul ou une opération sur la collection énumérable qui a référencé votre fonction d’agrégation.Your custom method can then perform a calculation or operation on the enumerable collection that has referenced your aggregate function. Pour plus d’informations sur les méthodes d’extension, consultez Méthodes d’extension.For more information about extension methods, see Extension Methods.

Par exemple, l’exemple suivant montre une fonction d’agrégation personnalisée qui calcule la valeur médiane d’une collection de nombres.For example, the following example shows a custom aggregate function that calculates the median value of a collection of numbers. Il existe deux surcharges de la Median méthode d’extension.There are two overloads of the Median extension method. La première surcharge accepte, en entrée, une collection de type IEnumerable(Of Double) .The first overload accepts, as input, a collection of type IEnumerable(Of Double). Si la Median fonction d’agrégation est appelée pour un champ de requête de type Double , cette méthode est appelée.If the Median aggregate function is called for a query field of type Double, this method will be called. La deuxième surcharge de la Median méthode peut être passée à n’importe quel type générique.The second overload of the Median method can be passed any generic type. La surcharge générique de la Median méthode prend un deuxième paramètre qui fait référence Func(Of T, Double) à l’expression lambda pour projeter une valeur pour un type (à partir d’une collection) comme valeur correspondante de type 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 délègue ensuite le calcul de la valeur médiane à l’autre surcharge de la Median méthode.It then delegates the calculation of the median value to the other overload of the Median method. Pour plus d’informations sur les expressions lambda, consultez expressions lambda.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’exemple suivant montre des exemples de requêtes qui appellent la Median fonction d’agrégation sur une collection de type Integer , et une collection de type 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 requête qui appelle la Median fonction d’agrégation sur la collection de type Double appelle la surcharge de la Median méthode qui accepte, en entrée, une collection de type 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 requête qui appelle la Median fonction d’agrégation sur la collection de type Integer appelle la surcharge générique de la Median méthode.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

Voir aussiSee also