Aggregate (Cláusula, Visual Basic)Aggregate Clause (Visual Basic)

Aplica uno o más funciones de agregado a una colección.Applies one or more aggregate functions to a collection.

SintaxisSyntax

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

ElementosParts

TérminoTerm DefiniciónDefinition
element Obligatorio.Required. Variable se usa para recorrer en iteración los elementos de la colección.Variable used to iterate through the elements of the collection.
type Opcional.Optional. Tipo de element.The type of element. Si se especifica ningún tipo, el tipo de element se deduce del collection.If no type is specified, the type of element is inferred from collection.
collection Obligatorio.Required. Hace referencia a la colección para operar en.Refers to the collection to operate on.
clause Opcional.Optional. Uno o más cláusulas de consulta, como un Where cláusula para refinar los resultados de consulta para aplicar la cláusula de agregado o cláusulas.One or more query clauses, such as a Where clause, to refine the query result to apply the aggregate clause or clauses to.
expressionList Obligatorio.Required. Uno o más delimitada por comas expresiones que identifican una función de agregado para aplicar a la colección.One or more comma-delimited expressions that identify an aggregate function to apply to the collection. Puede aplicar un alias a una función de agregado para especificar un nombre de miembro para el resultado de la consulta.You can apply an alias to an aggregate function to specify a member name for the query result. Si no se proporciona ningún alias, se usa el nombre de la función de agregado.If no alias is supplied, the name of the aggregate function is used. Para obtener ejemplos, vea la sección acerca de las funciones de agregado más adelante en este tema.For examples, see the section about aggregate functions later in this topic.

ComentariosRemarks

El Aggregate cláusula puede usarse para incluir las funciones de agregado en las consultas.The Aggregate clause can be used to include aggregate functions in your queries. Las funciones de agregado realizan comprobaciones y cálculos sobre un conjunto de valores y devuelven un valor único.Aggregate functions perform checks and computations over a set of values and return a single value. El valor calculado puede acceder mediante el uso de un miembro del tipo del resultado de consulta.You can access the computed value by using a member of the query result type. Son las funciones de agregado estándares que puede usar el All, Any, Average, Count, LongCount, Max, Min, y Sum funciones.The standard aggregate functions that you can use are the All, Any, Average, Count, LongCount, Max, Min, and Sum functions. Estas funciones son familiares para los desarrolladores familiarizados con agregados en SQL.These functions are familiar to developers who are familiar with aggregates in SQL. Se describen en la sección siguiente de este tema.They are described in the following section of this topic.

El resultado de una función de agregado se incluye en el resultado de la consulta como un campo del tipo del resultado de consulta.The result of an aggregate function is included in the query result as a field of the query result type. Puede proporcionar un alias para el resultado de la función de agregado especificar el nombre del miembro del tipo del resultado de consulta que va a contener el valor de agregado.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 no se proporciona ningún alias, se usa el nombre de la función de agregado.If no alias is supplied, the name of the aggregate function is used.

El Aggregate cláusula puede iniciar una consulta, o puede incluirse como una cláusula adicional en una consulta.The Aggregate clause can begin a query, or it can be included as an additional clause in a query. Si el Aggregate cláusula comienza una consulta, el resultado es un valor único que es el resultado de la función de agregado especificada en el Into cláusula.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 se especifica más de una función de agregado en la Into cláusula, la consulta devuelve un tipo único con una propiedad independiente para hacer referencia al resultado de cada función de agregado en la Into cláusula.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 el Aggregate cláusula se incluye como una cláusula adicional en una consulta, el tipo devuelto en la colección de consultas tendrá una propiedad independiente para hacer referencia al resultado de cada función de agregado en la Into cláusula.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.

Funciones de agregadoAggregate Functions

Los siguientes son las funciones de agregado estándares que se pueden usar con el Aggregate cláusula.The following are the standard aggregate functions that can be used with the Aggregate clause.

TodasAll

Devuelve true si todos los elementos de la colección satisfacen una condición especificada; en caso contrario, devuelve false.Returns true if all elements in the collection satisfy a specified condition; otherwise returns false. A continuación se muestra un ejemplo:The following is an example:

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

CualquieraAny

Devuelve true si algún elemento de la colección cumple una condición especificada; en caso contrario, devuelve false.Returns true if any element in the collection satisfies a specified condition; otherwise returns false. A continuación se muestra un ejemplo:The following is an example:

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

AverageAverage

Calcula el promedio de todos los elementos de la colección, o una expresión proporcionada para todos los elementos de la colección.Computes the average of all elements in the collection, or computes a supplied expression for all elements in the collection. A continuación se muestra un ejemplo:The following is an example:

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

RecuentoCount

Cuenta el número de elementos de la colección.Counts the number of elements in the collection. Puede proporcionar un elemento opcional Boolean expresión para contar solo el número de elementos de la colección que cumplen una condición.You can supply an optional Boolean expression to count only the number of elements in the collection that satisfy a condition. A continuación se muestra un ejemplo:The following is an example:

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

AgruparGroup

Hace referencia a los resultados de la consulta que se agrupan como resultado de una Group By o Group Join cláusula.Refers to query results that are grouped as a result of a Group By or Group Join clause. El Group función solo es válida en el Into cláusula de una Group By o Group Join cláusula.The Group function is valid only in the Into clause of a Group By or Group Join clause. Para obtener más información y ejemplos, vea Group By Clause y Group (cláusula) Join.For more information and examples, see Group By Clause and Group Join Clause.

LongCountLongCount

Cuenta el número de elementos de la colección.Counts the number of elements in the collection. Puede proporcionar un elemento opcional Boolean expresión para contar solo el número de elementos de la colección que cumplen una condición.You can supply an optional Boolean expression to count only the number of elements in the collection that satisfy a condition. Devuelve el resultado como un Long.Returns the result as a Long. Para obtener un ejemplo, vea el Count función de agregado.For an example, see the Count aggregate function.

Máx.Max

Calcula el valor máximo de la colección, o una expresión proporcionada para todos los elementos de la colección.Computes the maximum value from the collection, or computes a supplied expression for all elements in the collection. A continuación se muestra un ejemplo:The following is an example:

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

Mín.Min

Calcula el valor mínimo de la colección, o una expresión proporcionada para todos los elementos de la colección.Computes the minimum value from the collection, or computes a supplied expression for all elements in the collection. A continuación se muestra un ejemplo:The following is an example:

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

SumSum

Calcula la suma de todos los elementos de la colección, o una expresión proporcionada para todos los elementos de la colección.Computes the sum of all elements in the collection, or computes a supplied expression for all elements in the collection. A continuación se muestra un ejemplo:The following is an example:

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

EjemploExample

El ejemplo siguiente muestra cómo usar el Aggregate cláusula para aplicar funciones de agregado a un resultado de la consulta.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

Creación de funciones de agregado definido por el usuarioCreating User-Defined Aggregate Functions

Puede incluir sus propias funciones de agregado personalizadas en una expresión de consulta mediante la adición de métodos de extensión para el IEnumerable<T> tipo.You can include your own custom aggregate functions in a query expression by adding extension methods to the IEnumerable<T> type. El método personalizado, a continuación, puede realizar un cálculo o una operación en la colección enumerable que ha hecho referencia a la función de agregado.Your custom method can then perform a calculation or operation on the enumerable collection that has referenced your aggregate function. Para obtener más información sobre los métodos de extensión, vea Extension Methods (Métodos de extensión).For more information about extension methods, see Extension Methods.

Por ejemplo, en el ejemplo siguiente se muestra una función de agregado personalizada que calcula el valor medio de una colección de números.For example, the following example shows a custom aggregate function that calculates the median value of a collection of numbers. Hay dos sobrecargas de los Median método de extensión.There are two overloads of the Median extension method. La primera sobrecarga acepta como entrada, una colección de tipo IEnumerable(Of Double).The first overload accepts, as input, a collection of type IEnumerable(Of Double). Si el Median se denomina función de agregado para un campo de consulta de tipo Double, este método se llamará.If the Median aggregate function is called for a query field of type Double, this method will be called. La segunda sobrecarga de la Median método se puede pasar cualquier tipo genérico.The second overload of the Median method can be passed any generic type. La sobrecarga genérica de la Median método toma un segundo parámetro que hace referencia a la Func(Of T, Double) expresión lambda para proyectar un valor para un tipo (de una colección) como el valor correspondiente de 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. A continuación, delega el cálculo del valor medio en la otra sobrecarga de la Median método.It then delegates the calculation of the median value to the other overload of the Median method. Para obtener más información sobre las expresiones lambda, vea Expresiones 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

El ejemplo siguiente muestra ejemplos de consultas que llaman a la Median función en una colección de tipo de agregado Integery una colección de 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 consulta que llama el Median función en la colección de tipo de agregado Double llama a la sobrecarga de la Median método que acepta como entrada, una colección de 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 consulta que llama el Median función en la colección de tipo de agregado Integer llama a la sobrecarga genérica de la Median método.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

Vea tambiénSee also