Cláusula agregada (Visual Basic)
Aplica uma ou mais funções agregadas a uma coleção.
Sintaxe
Aggregate element [As type] In collection _
[, element2 [As type2] In collection2, [...]]
[ clause ]
Into expressionList
Partes
Termo | Definição |
---|---|
element |
Obrigatório. Variável usada para iterar através dos elementos da coleção. |
type |
Opcional. O tipo de element . Se nenhum tipo for especificado, o tipo de element é inferido de collection . |
collection |
Obrigatório. Refere-se à coleção para operar. |
clause |
Opcional. Uma ou mais cláusulas de consulta, como uma Where cláusula, para refinar o resultado da consulta para aplicar a cláusula ou cláusulas agregadas. |
expressionList |
Obrigatório. Uma ou mais expressões delimitadas por vírgulas que identificam uma função agregada a ser aplicada à coleção. Você pode aplicar um alias a uma função agregada para especificar um nome de membro para o resultado da consulta. Se nenhum alias for fornecido, o nome da função agregada será usado. Para obter exemplos, consulte a seção sobre funções agregadas mais adiante neste tópico. |
Observações
A Aggregate
cláusula pode ser usada para incluir funções agregadas em suas consultas. As funções agregadas executam verificações e cálculos sobre um conjunto de valores e retornam um único valor. Você pode acessar o valor computado usando um membro do tipo de resultado da consulta. As funções de agregação padrão que você pode usar são as All
funções , Any
, Average
, Count
, LongCount
, Max
Min
, e Sum
. Essas funções são familiares para desenvolvedores que estão familiarizados com agregações em SQL. Eles são descritos na seção a seguir deste tópico.
O resultado de uma função agregada é incluído no resultado da consulta como um campo do tipo de resultado da consulta. Você pode fornecer um alias para o resultado da função agregada para especificar o nome do membro do tipo de resultado da consulta que manterá o valor agregado. Se nenhum alias for fornecido, o nome da função agregada será usado.
A Aggregate
cláusula pode iniciar uma consulta ou pode ser incluída como uma cláusula adicional em uma consulta. Se a Aggregate
cláusula iniciar uma consulta, o resultado será um único valor que é o resultado da função de agregação especificada na Into
cláusula. Se mais de uma função de agregação for especificada na Into
cláusula, a consulta retornará um único tipo com uma propriedade separada para fazer referência ao resultado de cada função de agregação na Into
cláusula. Se a Aggregate
cláusula for incluída como uma cláusula adicional em uma consulta, o tipo retornado na coleção de consultas terá uma propriedade separada para fazer referência ao resultado de cada função agregada na Into
cláusula.
Funções de Agregação
A seguir estão as funções agregadas padrão que podem ser usadas com a Aggregate
cláusula.
Todos
Retorna true
se todos os elementos da coleção satisfizerem uma condição especificada; caso contrário, retorna false
. Veja o exemplo seguinte:
Dim customerList1 = Aggregate order In orders
Into AllOrdersOver100 = All(order.Total >= 100)
Qualquer
Retorna true
se qualquer elemento da coleção satisfizer uma condição especificada; caso contrário, retorna false
. Veja o exemplo seguinte:
Dim customerList2 = From cust In customers
Aggregate order In cust.Orders
Into AnyOrderOver500 = Any(order.Total >= 500)
Média
Calcula a média de todos os elementos da coleção ou calcula uma expressão fornecida para todos os elementos da coleção. Veja o exemplo seguinte:
Dim customerOrderAverage = Aggregate order In orders
Into Average(order.Total)
Count
Conta o número de elementos na coleção. Você pode fornecer uma expressão opcional Boolean
para contar apenas o número de elementos na coleção que satisfazem uma condição. Veja o exemplo seguinte:
Dim customerOrderAfter1996 = From cust In customers
Aggregate order In cust.Orders
Into Count(order.OrderDate > #12/31/1996#)
Agrupar
Refere-se aos resultados da consulta que são agrupados como resultado de uma Group By
cláusula ou Group Join
. A Group
função é válida apenas na Into
cláusula de uma Group By
ou Group Join
cláusula. Para obter mais informações e exemplos, consulte Cláusula de agrupamento por e Cláusula de associação de grupo.
Contagem Longa
Conta o número de elementos na coleção. Você pode fornecer uma expressão opcional Boolean
para contar apenas o número de elementos na coleção que satisfazem uma condição. Devolve o resultado como um Long
ficheiro . Para obter um exemplo, consulte a Count
função de agregação.
Máx
Calcula o valor máximo da coleção ou calcula uma expressão fornecida para todos os elementos da coleção. Veja o exemplo seguinte:
Dim customerMaxOrder = Aggregate order In orders
Into MaxOrder = Max(order.Total)
Min
Calcula o valor mínimo da coleção ou calcula uma expressão fornecida para todos os elementos da coleção. Veja o exemplo seguinte:
Dim customerMinOrder = From cust In customers
Aggregate order In cust.Orders
Into MinOrder = Min(order.Total)
Soma
Calcula a soma de todos os elementos da coleção ou calcula uma expressão fornecida para todos os elementos da coleção. Veja o exemplo seguinte:
Dim customerTotals = From cust In customers
Aggregate order In cust.Orders
Into Sum(order.Total)
Exemplo
O exemplo a seguir mostra como usar a Aggregate
cláusula para aplicar funções agregadas a um 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
Criando funções de agregação definidas pelo usuário
Você pode incluir suas próprias funções de agregação personalizadas em uma expressão de consulta adicionando métodos de extensão ao IEnumerable<T> tipo. Seu método personalizado pode então executar um cálculo ou operação na coleção enumerável que fez referência à sua função agregada. Para obter mais informações sobre métodos de extensão, consulte Métodos de extensão.
Por exemplo, o exemplo a seguir mostra uma função de agregação personalizada que calcula o valor mediano de uma coleção de números. Há duas sobrecargas do Median
método de extensão. A primeira sobrecarga aceita, como entrada, uma coleção do tipo IEnumerable(Of Double)
. Se a Median
função de agregação for chamada para um campo de consulta do tipo Double
, esse método será chamado. A segunda sobrecarga do Median
método pode ser passada qualquer tipo genérico. A sobrecarga genérica do Median
método usa um segundo parâmetro que faz referência à Func(Of T, Double)
expressão lambda para projetar um valor para um tipo (de uma coleção) como o valor correspondente do tipo Double
. Em seguida, delega o cálculo do valor mediano à outra sobrecarga do Median
método. Para obter mais informações sobre expressões lambda, consulte Expressões 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
O exemplo a seguir mostra consultas de exemplo que chamam a Median
função agregada em uma coleção do tipo Integer
, e uma coleção do tipo Double
. A consulta que chama a Median
função de agregação na coleção de tipo Double
chama a sobrecarga do Median
método que aceita, como entrada, uma coleção de tipo Double
. A consulta que chama a Median
função de agregação na coleção de tipo Integer
chama a sobrecarga genérica do 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