Compartir a través de


Aggregate (Cláusula, Visual Basic)

Aplica una o más funciones de agregado a una colección.

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

Elementos

Término

Definición

element

Obligatorio. Variable usada para recorrer en iteración los elementos de la colección.

type

Opcional. Tipo de element. Si no se especifica ningún tipo, el tipo de element se deduce de collection.

collection

Obligatorio. Hace referencia a la colección en la que funciona.

clause

Opcional. Una o más cláusulas de consulta, como una cláusula Where, que van a refinar el resultado de la consulta al que se va a aplicar la cláusula o cláusulas agregadas.

expressionList

Obligatorio. Una o más expresiones separadas por coma que identifican una función de agregado que se va a aplicar a la colección. Puede aplicar un alias a una función de agregado para especificar un nombre de miembro para el resultado de la consulta. Si no se proporciona ningún alias, se utiliza el nombre de la función de agregado. Para obtener ejemplos, vea la sección sobre funciones de agregado más adelante en este tema.

Comentarios

La cláusula Aggregate se puede utilizar para incluir las funciones de agregado en las consultas. Las funciones de agregado realizan comprobaciones y cálculos sobre un conjunto de valores y devuelven un valor único. Puede tener acceso al valor calculado utilizando un miembro del tipo del resultado de la consulta. Las funciones de agregado estándar que puede usar son las funciones All, Any, Average, Count, LongCount, Max, Min y Sum. Los programadores que están familiarizados con agregados en SQL, también están familiarizados con estas funciones. Se describen en la sección siguiente de este tema.

El resultado de una función de agregado se incluye en el resultado de la consulta como campo del tipo del resultado de la consulta. Puede proporcionar un alias para que el resultado de la función de agregado especifique el nombre del miembro del tipo del resultado de la consulta que contendrá el valor agregado. Si no se proporciona ningún alias, se utiliza el nombre de la función de agregado.

La cláusula Aggregate puede iniciar una consulta o se puede incluir como cláusula adicional de una consulta. Si la cláusula Aggregate inicia una consulta, el resultado es un solo valor que es el resultado de la función de agregado especificada en la cláusula Into. Si más de una función de agregado se especifica 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 de la cláusula Into. Si la cláusula Aggregate se incluye como 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 de la cláusula Into.

Funciones de agregado

La lista siguiente describe las funciones de agregado estándar que se pueden utilizar con la cláusula Aggregate.

Función

Descripción

All

Devuelve true si todos los elementos de la colección cumplen una condición especificada; de lo contrario, devuelve false. A continuación, se muestra un ejemplo:

Any

Devuelve true si cualquier elemento de la colección cumplen una condición especificada; de lo contrario, devuelve false. A continuación, se muestra un ejemplo:

Average

Calcula la media de todos los elementos de la colección o calcula la expresión proporcionada para todos los elementos en la colección. A continuación, se muestra un ejemplo:

Count

Cuenta el número de elementos de la colección. Puede proporcionar una expresión Boolean opcional para contar sólo el número de elementos de la colección que cumplen una condición. A continuación, se muestra un ejemplo:

Group

Hace referencia a los resultados de la consulta agrupados como resultado de una cláusula Group By o Group Join La función Group sólo es válida en la cláusula Into de Group By o la cláusula Group Join Para obtener más información y ejemplos, vea Group By (Cláusula, Visual Basic) y Group Join (Cláusula, Visual Basic).

LongCount

Cuenta el número de elementos de la colección. Puede proporcionar una expresión Boolean opcional para contar sólo el número de elementos de la colección que cumplen una condición. Devuelve el resultado como valor de tipo Long. Para obtener un ejemplo, vea la función de agregado Count.

Max

Calcula el valor máximo de la colección o una expresión proporcionada para todos los elementos de la colección. A continuación, se muestra un ejemplo:

Min

Calcula el valor mínimo de la colección o una expresión proporcionada para todos los elementos de la colección. A continuación, se muestra un ejemplo:

Sum

Calcula la suma de todos los elementos de la colección o la expresión proporcionada para todos los elementos en la colección. A continuación, se muestra un ejemplo:

Ejemplo

El ejemplo de código siguiente muestra cómo utilizar la cláusula Aggregate para aplicar funciones de agregado al resultado de una consulta.

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 usuario

Puede incluir sus propias funciones de agregado personalizadas en una expresión de consulta agregando métodos de extensión al tipo IEnumerable. Después, el método personalizado puede realizar un cálculo u operación en la colección enumerable que ha hecho referencia a la función de agregado. Para obtener más información acerca de los métodos de extensión, vea Métodos de extensión (Visual Basic).

El ejemplo de código siguiente muestra una función de agregado personalizada que calcula el valor medio de una colección de números, por ejemplo. Hay dos sobrecargas del método de extensión Median. La primera sobrecarga acepta, como entrada, una colección de tipo 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. La segunda sobrecarga del método Median puede pasar cualquier tipo genérico. 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. Después delega el cálculo del valor medio en la otra sobrecarga del método Median. Para obtener más información sobre las expresiones lambda, vea Lambda (expresiones) (Visual Basic).

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 de código siguiente muestra consultas del ejemplo que llaman a la función de agregado Median en una colección de tipo Integer y una colección de tipo 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. 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.

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én

Referencia

Select (Cláusula, Visual Basic)

From (Cláusula, Visual Basic)

Where (Cláusula, Visual Basic)

Group By (Cláusula, Visual Basic)

Conceptos

Introducción a LINQ en Visual Basic

Otros recursos

Consultas de Visual Basic