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

Aplica una 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 usada 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 no se especifica ningún tipo, el tipo de element se deduce de collection.If no type is specified, the type of element is inferred from collection.
collection Obligatorio.Required. Hace referencia a la colección en la que se va a operar.Refers to the collection to operate on.
clause Opcional.Optional. Una o varias cláusulas de consulta, como una cláusula Where, para refinar el resultado de la consulta a fin de aplicar la cláusula o cláusulas de agregado a.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. Una o más expresiones delimitadas por comas que identifican una función de agregado que se va a 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 utiliza 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

La cláusula Aggregate se puede usar para incluir 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. Puede tener acceso al valor calculado mediante el uso de un miembro del tipo de resultado de la consulta.You can access the computed value by using a member of the query result type. Las funciones de agregado estándar que puede utilizar son las funciones All, Any, @no__t 2, Count, LongCount, Max, Min y Sum.The standard aggregate functions that you can use are the All, Any, Average, Count, LongCount, Max, Min, and Sum functions. Estas funciones resultan familiares a los desarrolladores que están familiarizados con los agregados de 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 de resultado de la 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 que el resultado de la función de agregado especifique el nombre del miembro del tipo de resultado de la consulta que contendrá el valor 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 utiliza el nombre de la función de agregado.If no alias is supplied, the name of the aggregate function is used.

La cláusula Aggregate puede iniciar una consulta o se puede incluir 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 la cláusula Aggregate comienza una consulta, el resultado es un valor único que es el resultado de la función de agregado especificada en la cláusula 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 se especifica más de una función de agregado en la cláusula Into, la consulta devuelve un tipo único con una propiedad independiente para hacer referencia al resultado de cada función de agregado en la cláusula 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 cláusula Aggregate 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 cláusula 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.

Funciones de agregadoAggregate Functions

A continuación se enumeran las funciones de agregado estándar que se pueden usar con la cláusula Aggregate.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; de lo 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 satisface una condición especificada; de lo 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 calcula 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)

CountCount

Cuenta el número de elementos de la colección.Counts the number of elements in the collection. Puede proporcionar una expresión Boolean opcional para contar solo el número de elementos de la colección que satisfacen 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 agrupados como resultado de una cláusula Group By o Group Join.Refers to query results that are grouped as a result of a Group By or Group Join clause. La función Group solo es válida en la cláusula Into de una cláusula Group By o Group Join.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 cláusula Group by y Group 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 una expresión Boolean opcional para contar solo el número de elementos de la colección que satisfacen 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 Long.Returns the result as a Long. Para obtener un ejemplo, vea la función de agregado Count.For an example, see the Count aggregate function.

Máx.Max

Calcula el valor máximo de la colección o calcula 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 calcula 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 calcula 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

En el ejemplo siguiente se muestra cómo usar la cláusula Aggregate para aplicar funciones de agregado al resultado de una 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

Crear funciones de agregado definidas por el usuarioCreating User-Defined Aggregate Functions

Puede incluir sus propias funciones de agregado personalizadas en una expresión de consulta agregando métodos de extensión al tipo IEnumerable<T>.You can include your own custom aggregate functions in a query expression by adding extension methods to the IEnumerable<T> type. Después, el método personalizado 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 del método de extensión Median.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 se llama a la función de agregado Median para un campo de consulta de tipo Double, se llamará a este método.If the Median aggregate function is called for a query field of type Double, this method will be called. A la segunda sobrecarga del método Median se le puede pasar cualquier tipo genérico.The second overload of the Median method can be passed any generic type. La sobrecarga genérica del método Median toma un segundo parámetro que hace referencia a la expresión lambda Func(Of T, Double) 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 del método Median.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

En el ejemplo siguiente se muestran consultas de ejemplo que llaman a la función de agregado Median en una colección de tipo Integer y 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 a la función de agregado Median en la colección de tipo Double llama a la sobrecarga del método Median 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 a la función de agregado Median en la colección de tipo Integer llama a la sobrecarga genérica del método 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

Vea tambiénSee also