Eventos
17 de mar., 23 - 21 de mar., 23
Junte-se à série de encontros para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registrar agoraNão há mais suporte para esse navegador.
Atualize o Microsoft Edge para aproveitar os recursos, o suporte técnico e as atualizações de segurança mais recentes.
Aplica uma ou mais funções de agregação a uma coleção.
Aggregate element [As type] In collection _
[, element2 [As type2] In collection2, [...]]
[ clause ]
Into expressionList
Termo | Definição |
---|---|
element |
Obrigatórios. Variável usada para iterar por meio dos elementos da coleção. |
type |
Opcional. O tipo de element . Se nenhum tipo for especificado, o de element é inferido de collection . |
collection |
Obrigatórios. Refere-se à coleção na qual a operação deve ocorrer. |
clause |
Opcional. Uma ou mais cláusulas de consulta, como Where , para refinar o resultado da consulta, com o objetivo de aplicar a cláusula ou as cláusulas de agregação. |
expressionList |
Obrigatórios. Uma ou mais expressões delimitadas por vírgulas que identificam uma função de agregação a ser aplicada à coleção. Você pode aplicar um alias a uma função de agregação para especificar um nome de membro para o resultado da consulta. Se nenhum alias for fornecido, o nome da função de agregação será usado. Para obter exemplos, confira a seção sobre funções de agregação posteriormente neste tópico. |
A cláusula Aggregate
pode ser usada para incluir funções de agregação nas consultas. As funções de agregação realizam verificações e cálculos sobre um conjunto de valores e retornam um valor único. Você pode acessar o valor calculado usando um membro do tipo de resultado da consulta. As funções de agregação padrão que você pode usar são All
, Any
, Average
, Count
, LongCount
, Max
, Min
e Sum
. Essas funções são familiares aos desenvolvedores, que conhecem as agregações em SQL. Elas são descritos na próxima seção deste tópico.
O resultado de uma função agregada é incluído no resultado da consulta como um campo do tipo de resultado dela. Você pode fornecer um alias para o resultado da função de agregação para especificar o nome do membro do tipo de resultado da consulta que conterá o valor agregado. Se nenhum alias for fornecido, o nome da função de agregação será usado.
A cláusula Aggregate
pode iniciar uma consulta ou pode ser incluída como uma cláusula adicional em uma consulta. Se a cláusula Aggregate
iniciar uma consulta, o resultado será um valor único, que é o resultado da função agregada especificada na cláusula Into
. Se mais de uma função de agregação for especificada na cláusula Into
, a consulta retornará um único tipo com uma propriedade separada para referenciar o resultado de cada função de agregação na cláusula Into
. Se a cláusula Aggregate
for incluída como cláusula adicional em uma consulta, o tipo retornado na coleção de consultas terá uma propriedade separada para referenciar o resultado de cada função de agregação na cláusula Into
.
Veja a seguir as funções de agregação padrão que podem ser usadas com a cláusula Aggregate
.
Retorna true
se todos os elementos na coleção atenderem a uma condição especificada; caso contrário, retornará false
. A seguir, é mostrado um exemplo:
Dim customerList1 = Aggregate order In orders
Into AllOrdersOver100 = All(order.Total >= 100)
Retorna true
se qualquer elemento na coleção atender a uma condição especificada; caso contrário, retornará false
. A seguir, é mostrado um exemplo:
Dim customerList2 = From cust In customers
Aggregate order In cust.Orders
Into AnyOrderOver500 = Any(order.Total >= 500)
Calcula a média de todos os elementos na coleção ou calcula uma expressão fornecida para todos os elementos da coleção. A seguir, é mostrado um exemplo:
Dim customerOrderAverage = Aggregate order In orders
Into Average(order.Total)
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 atendam a uma condição. A seguir, é mostrado um exemplo:
Dim customerOrderAfter1996 = From cust In customers
Aggregate order In cust.Orders
Into Count(order.OrderDate > #12/31/1996#)
Refere-se aos resultados da consulta que são agrupados como resultado de uma cláusula Group By
ou Group Join
. A função Group
é válida somente na cláusula Into
de Group By
ou Group Join
. Para obter mais informações e exemplos, confira Cláusula Group By e Cláusula Group Join.
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 atendam a uma condição. Retorna o resultado como um Long
. Para obter um exemplo, confira a função de agregação Count
.
Calcula o valor máximo da coleção ou uma expressão fornecida para todos os elementos da coleção. A seguir, é mostrado um exemplo:
Dim customerMaxOrder = Aggregate order In orders
Into MaxOrder = Max(order.Total)
Calcula o valor mínimo da coleção ou uma expressão fornecida para todos os elementos da coleção. A seguir, é mostrado um exemplo:
Dim customerMinOrder = From cust In customers
Aggregate order In cust.Orders
Into MinOrder = Min(order.Total)
Calcula a soma de todos os elementos na coleção ou uma expressão fornecida para todos os elementos da coleção. A seguir, é mostrado um exemplo:
Dim customerTotals = From cust In customers
Aggregate order In cust.Orders
Into Sum(order.Total)
O exemplo a seguir mostra como usar a cláusula Aggregate
para aplicar funções de agregação 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
Você pode incluir as próprias funções de agregação personalizadas em uma expressão de consulta adicionando métodos de extensão ao tipo IEnumerable<T>. Em seguida, o método personalizado pode executar um cálculo ou uma operação na coleção enumerável que fez referência à função de agregação. Para obter mais informações sobre os 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 método de extensão Median
. A primeira sobrecarga aceita, como entrada, uma coleção de tipo IEnumerable(Of Double)
. Se a função de agregação Median
for chamada para um campo de consulta do tipo Double
, esse método será chamado. A segunda sobrecarga do método Median
pode ser passada por qualquer tipo genérico. A sobrecarga genérica do método Median
usa um segundo parâmetro que faz referência à expressão lambda Func(Of T, Double)
para projetar um valor para um tipo (de uma coleção) como o valor correspondente do tipo Double
. Em seguida, ele delega o cálculo do valor mediano para a outra sobrecarga do método Median
. 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 função de agregação Median
em uma coleção de tipos Integer
e uma coleção de tipo Double
. A consulta que chama a função de agregação Median
na coleção de tipos Double
chama a sobrecarga do método Median
que aceita, como entrada, uma coleção de tipo Double
. A consulta que chama a função de agregação Median
na coleção de tipos Integer
chama a sobrecarga genérica do 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
Comentários do .NET
O .NET é um projeto código aberto. Selecione um link para fornecer comentários:
Eventos
17 de mar., 23 - 21 de mar., 23
Junte-se à série de encontros para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registrar agora