Agregační klauzule (Visual Basic)
Kolekce se týká jednoho nebo více agregačních funkcí.
Aggregate element [As type] In collection _
[, element2 [As type2] In collection2, [...]]
[ clause ]
Into expressionList
Části
Termín |
Definice |
element |
Povinné.Proměnné lze iterovat prvky v kolekci. |
type |
Nepovinné.Typ element.Pokud není zadán žádný typ, typ element je odvodit ze collection. |
collection |
Povinné.Odkazuje na kolekci provozovat. |
clause |
Nepovinné.Jeden nebo více dotazů klauzule, například Where výsledek dotazu použít agregační klauzule nebo doložky k upřesnění klauzule. |
expressionList |
Povinné.Jeden nebo více oddělených čárkami výrazy, které identifikují agregační funkci použít ke shromažďování.Určete název členu výsledku dotazu agregační funkce můžete použít alias.Jestliže žádný alias je zadán, je použit název agregační funkce.Příklady naleznete v části o agregační funkce dále v tomto tématu. |
Poznámky
Aggregate Klauzuli lze zahrnout agregační funkce dotazů.Agregační funkce provádějí kontroly a výpočty přes sadu hodnot a vrátí jednu hodnotu.Vypočítaná hodnota můžete přistupovat pomocí člena typu výsledek dotazu.The standard aggregate functions that you can use are the All, Any, Average, Count, LongCount, Max, Min, and Sum functions.Tyto funkce jsou dobře vývojáři, kteří znají souhrnných ukazatelů v SQL.Jsou popsány v následující části tohoto tématu.
Výsledek dotazu je součástí výsledek agregační funkce jako pole typ výsledku dotazu.Můžete zadat alias zadejte název člena typ výsledku dotazu, který bude obsahovat souhrnná hodnota výsledek agregační funkce.Jestliže žádný alias je zadán, je použit název agregační funkce.
Aggregate Začít klauzule dotazu nebo lze použít jako další klauzulí v dotazu.Pokud Aggregate začíná klauzule dotazu, výsledkem je jediná hodnota, která je výsledkem agregační funkci v Into klauzule.Pokud je zadáno více než jednu souhrnnou funkci v Into klauzule, dotaz vrátí jeden typ samostatné vlastnost výsledek agregační funkce v odkazu Into klauzule.Pokud Aggregate klauzule je zahrnuta jako další klauzulí v dotazu, typ vrácených v dotazu kolekce bude mít zvláštní vlastnosti výsledek agregační funkce v odkazu Into klauzule.
Agregační funkce
Následující seznam popisuje standardní agregační funkce, které lze použít s Aggregate klauzule.
Function |
Description |
All |
Vrátí true Pokud všechny prvky v kolekci splňují zadanou podmínku; v opačném případě vrátí hodnotu false.Následuje příklad: |
Any |
Vrátí true Pokud jakýkoli prvek kolekce splňuje zadané podmínky; v opačném případě vrátí hodnotu false.Následuje příklad: |
Average |
Vypočítá průměr všech prvků v kolekci nebo dodaných computes výraz pro všechny prvky v kolekci.Následuje příklad: |
Count |
Vrátí počet prvků v kolekci.Můžete zadat volitelného Boolean výrazu můžete zjistit počet prvků v kolekci, které splňují podmínku.Následuje příklad: |
Group |
Výsledky dotazu, které jsou seskupeny v důsledku odkazuje Group By nebo Group Join klauzule.Group Funkce je platná pouze v Into klauzule Group By nebo Group Join klauzule.Další informace a příklady viz Seskupit podle klauzule (Visual Basic) a Klauzule Join skupiny (Visual Basic). |
LongCount |
Vrátí počet prvků v kolekci.Můžete zadat volitelného Boolean výrazu můžete zjistit počet prvků v kolekci, které splňují podmínku.Vrátí výsledek jako Long.Příklad, naleznete Count agregační funkce. |
Max |
Vypočítá maximální hodnotu z kolekce nebo vypočítá zadaný výraz pro všechny prvky v kolekci.Následuje příklad: |
Min |
Vypočítá minimální hodnotu z kolekce nebo vypočítá zadaný výraz pro všechny prvky v kolekci.Následuje příklad: |
Sum |
Vypočítá součet všech prvků v kolekci nebo vypočítá zadaný výraz pro všechny prvky v kolekci.Následuje příklad: |
Příklad
Následující příklad kódu ukazuje, jak použít Aggregate klauzule výsledek dotazu použít agregační funkce.
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
Při vytváření agregačních funkcí definovaných uživatelem
Můžete zahrnout vlastní agregační funkce ve výrazu dotazu přidáním rozšíření metody IEnumerable<T> typu.Vlastní metody můžete provádět výpočet nebo operaci agregující kolekci, která obsahuje odkazy agregační funkci.Další informace o metodách rozšíření, viz Rozšíření metody (Visual Basic).
Například následující příklad kódu ukazuje vlastní agregační funkce vypočítá hodnotu mediánu čísel kolekce.Existují dvě přetížení z Median rozšíření metody.První přetížení přijímá jako vstup, kolekce typu IEnumerable(Of Double).Pokud Median agregační funkce nazývá pole v dotazu typu Double, bude tato metoda volána.Druhý přetížení Median metody mohou být předány žádné obecný typ.Obecný přetížení Median metoda přebírá druhý parametr, který odkazuje Func(Of T, Double) lambda výraz do projektu jako odpovídající hodnota zadejte hodnotu pro typ (z kolekce) Double.Je potom deleguje výpočet střední hodnoty na další přetížení Median metoda.Další informace o výrazech lambda, viz Lambda výrazy (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
Následující kód například zobrazí vzorek dotazů, které volají Median agregační funkce kolekce typu Integera kolekce typu Double.Dotaz, který volá Median agregační funkce kolekce typu Double volání přetížení Median metoda, která přijímá jako vstup, kolekce typu Double.Dotaz, který volá Median agregační funkce kolekce typu Integer volá obecný přetížení Median metoda.
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
Viz také
Referenční dokumentace
Vyberte klauzule (Visual Basic)
Seskupit podle klauzule (Visual Basic)
Koncepty
Úvod do jazyka Visual Basic LINQ