Sdílet prostřednictvím


Aggregate – 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 Group By – klauzule (Visual Basic) a Group Join – klauzule (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 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 Metody rozšíření (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

Select – klauzule (Visual Basic)

From – klauzule (Visual Basic)

Where – klauzule (Visual Basic)

Group By – klauzule (Visual Basic)

Koncepty

Představení technologie LINQ v jazyce Visual Basic

Další zdroje

Dotazy (Visual Basic)