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  

ComposantsParts

TermeTerm DéfinitionDefinition
element Requis.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 Ce paramètre est 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 Requis.Required. Fait référence à la collection sur laquelle opérer.Refers to the collection to operate on.
clause Ce paramètre est facultatif.Optional. Une ou plusieurs clauses de requête, telles qu’une clause Where, 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 Requis.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.

NotesRemarks

La clause Aggregate 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 les fonctions All, Any, Average, Count, LongCount, Max, Minet 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 clause Aggregate 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 clause Aggregate 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 clause Into.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 clause Into, 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 clause Into.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 clause Aggregate 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 clause Into.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 Aggregate sont les suivantes.The following are the standard aggregate functions that can be used with the Aggregate clause.

ToutAll

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. Voici un exemple :The following is an example:

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

TousAny

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. Voici un 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. Voici un exemple :The following is an example:

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

NombreCount

Compte le nombre d’éléments dans la collection.Counts the number of elements in the collection. Vous pouvez fournir une expression Boolean 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. Voici un exemple :The following is an example:

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

GroupeGroup

Fait référence aux résultats de requête regroupés à la suite d’une clause Group By ou Group Join.Refers to query results that are grouped as a result of a Group By or Group Join clause. La fonction Group est valide uniquement dans la clause Into d’une clause Group By ou Group Join.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 expression Boolean 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 la forme d’un Long.Returns the result as a Long. Pour obtenir un exemple, consultez la fonction d’agrégation Count.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. Voici un 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. Voici un 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. Voici un 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 clause Aggregate 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éation de fonctions d’agrégation définies par l’utilisateurCreating 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 type de IEnumerable<T>.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 méthode d’extension Median.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 fonction d’agrégation Median 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 méthode Median 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 méthode Median prend un deuxième paramètre qui fait référence à l’expression lambda Func(Of T, Double) 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 méthode Median.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 fonction d’agrégation Median sur une collection de type Integeret 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 fonction d’agrégation Median sur la collection de type Double appelle la surcharge de la méthode Median 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 fonction d’agrégation Median sur la collection de type Integer appelle la surcharge générique de la méthode Median.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