Udostępnij za pośrednictwem


Klauzula agregacji (Visual Basic)

Stosuje się jedną lub więcej funkcji agregujących do kolekcji.

Aggregate element [As type] In collection _
  [, element2 [As type2] In collection2, [...]]
  [ clause ]
  Into expressionList

Części

Termin

Definicja

element

Wymagane.Zmienna służą do iteracji elementów w kolekcji.

type

Opcjonalne.Typ element.Jeśli zostanie określony żaden typ, rodzaj element jest wywnioskować z collection.

collection

Wymagane.Odnosi się do zbierania, operowania na.

clause

Opcjonalne.Jeden lub więcej kwerend klauzule, takie jak Where klauzuli, aby uściślić wynik kwerendy agregującej klauzuli lub klauzul, które mają.

expressionList

Wymagane.Jeden lub więcej rozdzielanych przecinkami wyrażeń określających funkcji agregującej, aby zastosować do kolekcji.Alias można zastosować do funkcji agregującej do określenia nazwy Członkowskie dla wyników kwerendy.Jeżeli żaden alias jest podany, jest używana nazwa funkcji agregującej.Przykładami zobacz podrozdział poświęcony funkcji agregujących w dalszej części tego tematu.

Uwagi

Aggregate Klauzuli można dołączyć funkcje agregujące w kwerendach.Funkcje agregujące przeprowadzają kontrole i obliczenia na zestawie wartości i zwracają pojedynczą wartość.Wartość wyliczona dostęp przy użyciu członkiem typu wyniku kwerendy.The standard aggregate functions that you can use are the All, Any, Average, Count, LongCount, Max, Min, and Sum functions.Funkcje te są znane deweloperzy, którzy są zaznajomieni z kruszywa w języku SQL.Są one opisane w poniższej sekcji tego tematu.

Wynik funkcji agregującej znajduje się w wyniku kwerendy jako pole Typ wyników kwerendy.Można podać alias wynik funkcji agregującej do określenia nazwy członka typu wyniku kwerendy, przechowujące wartości agregacji.Jeżeli żaden alias jest podany, jest używana nazwa funkcji agregującej.

Aggregate Klauzuli można rozpocząć kwerendę, lub mogą być uwzględniane jako dodatkową klauzulą w kwerendzie.Jeśli Aggregate klauzuli rozpoczyna się w kwerendzie, wynikiem jest pojedyncza wartość, która jest wynikiem funkcji agregującej, określone w Into klauzuli.Jeżeli określono więcej niż jedną funkcję agregacji w Into klauzuli, kwerenda zwraca jeden typ z oddzielnych właściwości, aby odwołać się za wynik każdej funkcji agregującej w Into klauzuli.Jeśli Aggregate klauzuli jest uwzględniana jako dodatkową klauzulą w kwerendzie, typ zwracany w kolekcji kwerendy będzie oddzielnych właściwości, aby odwołać się za wynik każdej funkcji agregującej w Into klauzuli.

Funkcje agregujące

Na poniższej liście opisano standardowe funkcje agregujące, które mogą być używane z Aggregate klauzuli.

Funkcja

Opis

All

Zwraca true , gdy wszystkie elementy w kolekcji spełniają określony warunek; w przeciwnym razie zwraca false.Oto przykład:

Any

Zwraca true , jeżeli każdy element w kolekcji spełnia określony warunek; w przeciwnym razie zwraca false.Oto przykład:

Average

Oblicza średnią wszystkich elementów w kolekcji lub wyrażenie computes dostarczane dla wszystkich elementów w kolekcji.Oto przykład:

Count

Zlicza liczbę elementów w kolekcji.Można podać opcjonalny Boolean wyrażenie do policzenia, ile elementów w kolekcji, które spełniają warunek.Oto przykład:

Group

Odnosi się do wyników kwerendy, które są zgrupowane w wyniku Group By lub Group Join klauzuli.Group Funkcja jest prawidłowa tylko w Into klauzuli Group By lub Group Join klauzuli.Aby uzyskać dodatkowe informacje i przykłady, zobacz Grupuj według klauzuli (Visual Basic) i Klauzula sprzężenia grupy (Visual Basic).

LongCount

Zlicza liczbę elementów w kolekcji.Można podać opcjonalny Boolean wyrażenie do policzenia, ile elementów w kolekcji, które spełniają warunek.Zwraca wynik w postaci Long.Na przykład, zobacz Count funkcję agregacji.

Max

Oblicza maksymalną wartość z kolekcji lub oblicza wyrażenie podane dla wszystkich elementów w kolekcji.Oto przykład:

Min

Oblicza minimalną wartość z kolekcji lub oblicza wyrażenie podane dla wszystkich elementów w kolekcji.Oto przykład:

Sum

Oblicza sumę wszystkich elementów w kolekcji lub oblicza wyrażenie podane dla wszystkich elementów w kolekcji.Oto przykład:

Przykład

Poniższy przykład kodu pokazuje, jak używać Aggregate klauzuli zastosowanie funkcji agregujących w wyniku kwerendy.

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

Tworzenie zdefiniowanej przez użytkownika funkcji agregujących

W wyrażeniu kwerendy może zawierać własne niestandardowe funkcje agregujące, dodając rozszerzenie metody IEnumerable<T> typu.Następnie można wykonywać swoje metody niestandardowe, obliczeń lub operacji na agregującym Kolekcja, która zawiera odwołanie do funkcji agregującej.Aby uzyskać więcej informacji o metodach rozszerzenie, zobacz Rozszerzenie metody (Visual Basic).

Na przykład poniższy przykład kodu pokazuje niestandardowe funkcja agregująca, która oblicza wartość mediany zbioru liczb.Istnieją dwa przeciążenia Median metodę rozszerzenia.Przeciążenie pierwszy akceptuje jako dane wejściowe, Kolekcja typu IEnumerable(Of Double).Jeśli Median funkcja agregacji zwana jest dla pola kwerendy typu Double, będzie można wywołać tej metody.Drugi przeciążenie z Median metody mogą być przekazywane do dowolnego typu rodzajowego.Rodzajowy przeciążenie z Median metoda zajmuje drugi parametr, który odwołuje się do Func(Of T, Double) wyrażenie lambda projektu wartość dla typu (z kolekcji), jak odpowiadające im wartości typu Double.Przekazuje następnie obliczenia wartość mediany do innych przeciążenie z Median metody.Aby uzyskać więcej informacji na temat wyrażeń lambda, zobacz Wyrażenia lambda (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

Następujący kod dodaje przykład pokazuje próbki kwerend, które wywołują Median funkcję na zbiór typ agregacji Integeri kolekcji typu Double.Kwerendy, która wywołuje Median funkcję w zbiorze typ agregacji Double wywołania przeciążenia z Median metodę, która akceptuje jako dane wejściowe, Kolekcja typu Double.Kwerendy, która wywołuje Median funkcję w zbiorze typ agregacji Integer wywołuje rodzajowy przeciążenie z Median metody.

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

Zobacz też

Informacje

Wybierz klauzuli (Visual Basic)

Z klauzuli (Visual Basic)

Gdy klauzula (Visual Basic)

Grupuj według klauzuli (Visual Basic)

Koncepcje

Wprowadzenie do LINQ w języku Visual Basic

Inne zasoby

Kwerendy (Visual Basic)