Aggregate – klauzule (Visual Basic)

 

Nejnovější dokumentaci k sadě Visual Studio 2017 RC najdete tady.

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  

TermínDefinice
elementPovinné. Proměnné lze iterovat prvky v kolekci.
typeNepovinné. Typ element. Pokud není zadán žádný typ, typ element je odvodit ze collection.
collectionPovinné. Odkazuje na kolekci provozovat.
clauseNepovinné. 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.
expressionListPovinné. 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.

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.

Následující seznam popisuje standardní agregační funkce, které lze použít s Aggregate klauzule.

FunctionDescription
AllVrá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:

 
        Dim customerList1 = Aggregate order In orders
                            Into AllOrdersOver100 = All(order.Total >= 100)
AnyVrá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:

 
    Dim customerList2 = From cust In customers
                        Aggregate order In cust.Orders
                        Into AnyOrderOver500 = Any(order.Total >= 500)
AverageVypočí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:

 
    Dim customerOrderAverage = Aggregate order In orders
                               Into Average(order.Total)
CountVrá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:

 
    Dim customerOrderAfter1996 = From cust In customers
                                 Aggregate order In cust.Orders
                                 Into Count(order.OrderDate > #12/31/1996#)
GroupVý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 a Group Join – klauzule.
LongCountVrá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.
MaxVypočítá maximální hodnotu z kolekce nebo vypočítá zadaný výraz pro všechny prvky v kolekci. Následuje příklad:

 
    Dim customerMaxOrder = Aggregate order In orders
                           Into MaxOrder = Max(order.Total)
MinVypočítá minimální hodnotu z kolekce nebo vypočítá zadaný výraz pro všechny prvky v kolekci. Následuje příklad:

 
    Dim customerMinOrder = From cust In customers
                           Aggregate order In cust.Orders
                           Into MinOrder = Min(order.Total)
SumVypočítá součet všech prvků v kolekci nebo vypočítá zadaný výraz pro všechny prvky v kolekci. Následuje příklad:

 
    Dim customerTotals = From cust In customers
                         Aggregate order In cust.Orders
                         Into Sum(order.Total)

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

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 Metody rozšíření.

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.

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

Představení technologie LINQ v jazyce Visual Basic
Dotazy
Select – klauzule
From – klauzule
Where – klauzule
Group By – klauzule

Zobrazit: