Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Aplica una o varias funciones de agregado a una colección.
Sintaxis
Aggregate element [As type] In collection _
[, element2 [As type2] In collection2, [...]]
[ clause ]
Into expressionList
Partes
| 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 se va a operar. |
clause |
Opcional. Una o varias cláusulas de consulta, como una Where cláusula , para refinar el resultado de la consulta para aplicar la cláusula o cláusulas de agregado a . |
expressionList |
Obligatorio. Una o varias expresiones delimitadas por comas 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 usa el nombre de la función de agregado. Para obtener ejemplos, consulte la sección sobre las funciones de agregado más adelante en este tema. |
Observaciones
La Aggregate cláusula se puede usar para incluir funciones de agregado en las consultas. Las funciones de agregado realizan comprobaciones y cálculos en un conjunto de valores y devuelven un único valor. Puede acceder al valor calculado mediante un miembro del tipo de resultado de la consulta. Las funciones de agregado estándar que puede usar son las Allfunciones , Any, CountAverage, LongCount, , Max, , Miny Sum . Estas funciones son conocidas para los desarrolladores que están familiarizados con los agregados en SQL. Se describen en la siguiente sección de este tema.
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. Puede proporcionar un alias para el resultado de la función de agregado para especificar el nombre del miembro del tipo de resultado de la consulta que contendrá el valor agregado. Si no se proporciona ningún alias, se usa el nombre de la función de agregado.
La Aggregate cláusula puede iniciar una consulta o se puede incluir como una cláusula adicional en una consulta. Si la Aggregate cláusula comienza una consulta, el resultado es un valor único que es el resultado de la función de agregado especificada en la Into cláusula . Si se especifica más de una función de agregado en la Into cláusula , la consulta devuelve un solo tipo con una propiedad independiente para hacer referencia al resultado de cada función de agregado en la Into cláusula . Si la 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 .
Funciones de agregado
A continuación se muestran las funciones de agregado estándar que se pueden usar con la Aggregate cláusula .
Todos
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:
Dim customerList1 = Aggregate order In orders
Into AllOrdersOver100 = All(order.Total >= 100)
Cualquiera
Devuelve true si algún elemento de la colección cumple una condición especificada; de lo contrario, devuelve false. A continuación se muestra un ejemplo:
Dim customerList2 = From cust In customers
Aggregate order In cust.Orders
Into AnyOrderOver500 = Any(order.Total >= 500)
Promedio
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. A continuación se muestra un ejemplo:
Dim customerOrderAverage = Aggregate order In orders
Into Average(order.Total)
Contar
Cuenta el número de elementos de la colección. Puede proporcionar una expresión opcional Boolean para contar solo el número de elementos de la colección que cumplen una condición. A continuación se muestra un ejemplo:
Dim customerOrderAfter1996 = From cust In customers
Aggregate order In cust.Orders
Into Count(order.OrderDate > #12/31/1996#)
Grupo
Hace referencia a los resultados de la consulta que se agrupan como resultado de una Group By cláusula o Group Join . La Group función solo es válida en la Into cláusula de una Group By cláusula o Group Join . Para obtener más información y ejemplos, vea Cláusula Group By y Cláusula join de grupo.
LongCount
Cuenta el número de elementos de la colección. Puede proporcionar una expresión opcional Boolean para contar solo el número de elementos de la colección que cumplen una condición. Devuelve el resultado como .Long Para obtener un ejemplo, consulte la Count función de agregado.
Máx.
Calcula el valor máximo de la colección o calcula una expresión proporcionada para todos los elementos de la colección. A continuación se muestra un ejemplo:
Dim customerMaxOrder = Aggregate order In orders
Into MaxOrder = Max(order.Total)
Minuto
Calcula el valor mínimo de la colección o calcula una expresión proporcionada para todos los elementos de la colección. A continuación se muestra un ejemplo:
Dim customerMinOrder = From cust In customers
Aggregate order In cust.Orders
Into MinOrder = Min(order.Total)
Suma
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. A continuación se muestra un ejemplo:
Dim customerTotals = From cust In customers
Aggregate order In cust.Orders
Into Sum(order.Total)
Ejemplo
En el ejemplo siguiente se muestra cómo usar la Aggregate cláusula para aplicar funciones de agregado a un resultado de 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
Creación de funciones de agregado de User-Defined
Puede incluir sus propias funciones de agregado personalizadas en una expresión de consulta agregando métodos de extensión al IEnumerable<T> tipo . Después, el método personalizado puede realizar un cálculo o una operación en la colección enumerable a la que se ha hace referencia a la función de agregado. Para obtener más información sobre los métodos de extensión, vea Métodos de extensión.
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. Hay dos sobrecargas del método de Median extensión. La primera sobrecarga acepta, como entrada, una colección de tipo IEnumerable(Of Double). Si se llama a la Median función de agregado para un campo de consulta de tipo Double, se llamará a este método. La segunda sobrecarga del Median método se puede pasar a cualquier tipo genérico. La sobrecarga genérica del 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 del tipo Double. A continuación, delega el cálculo del valor medio a la otra sobrecarga del Median método. Para obtener más información sobre las expresiones lambda, vea Expresiones lambda.
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 Median función de agregado en una colección de tipo Integery una colección de tipo Double. La consulta que llama a la Median función de agregado en la colección de tipo Double llama a la Median sobrecarga del método que acepta, como entrada, una colección de tipo Double. La consulta que llama a la Median función de agregado en la colección de tipo Integer llama a la sobrecarga genérica del Median método .
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