Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Aggregate-Klausel (Visual Basic)

Wendet eine oder mehrere Aggregatfunktionen auf eine Auflistung an.

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

Begriff

Definition

element

Erforderlich. Eine Variable, die zum Durchlaufen der Elemente der Auflistung verwendet wird.

type

Optional. Der Typ von element. Wenn kein Typ angegeben ist, wird der Typ von element von collection abgeleitet.

collection

Erforderlich. Bezeichnet die zu bearbeitende Auflistung.

clause

Optional. Eine oder mehrere Abfrageklauseln (z. B. eine Where-Klausel) zum Verfeinern des Abfrageergebnisses, auf das die Aggregate-Klausel oder -Klauseln angewendet werden.

expressionList

Erforderlich. Ein oder mehrere durch Trennzeichen getrennte Ausdrücke, die eine Aggregatfunktion angeben, die auf die Auflistung angewendet wird. Sie können für eine Aggregatfunktion einen Alias angeben, um einen Membernamen für das Abfrageergebnis festzulegen. Wenn Sie keinen Alias angeben, wird der Name der Aggregatfunktion verwendet. Beispiele finden Sie weiter unten in diesem Thema im Abschnitt über Aggregatfunktionen.

Mit der Aggregate-Klausel können Sie in Abfragen Aggregatfunktionen angeben. Aggregatfunktionen führen für einen Satz von Werten Überprüfungen und Berechnungen aus und geben einen einzelnen Wert zurück. Sie können mithilfe eines Members des Abfrageergebnistyps auf den berechneten Wert zugreifen. Sie können die folgenden Standardaggregatfunktionen verwenden: All, Any, Average, Count, LongCount, Max, Min und Sum. Entwicklern, die sich mit Aggregaten in SQL auskennen, sollten diese Funktionen vertraut sein. Sie werden im folgenden Abschnitt dieses Themas beschrieben.

Das Ergebnis einer Aggregatfunktion wird im Abfrageergebnis als Feld des Abfrageergebnistyps aufgenommen. Sie können für das Ergebnis der Aggregatfunktion einen Alias angeben, um den Namen des Members des Abfrageergebnistyps festzulegen, der den Aggregatwert aufnimmt. Wenn Sie keinen Alias angeben, wird der Name der Aggregatfunktion verwendet.

Die Aggregate-Klausel kann eine Abfrage einleiten oder in einer Abfrage als zusätzliche Klausel angegeben werden. Wenn die Aggregate-Klausel eine Abfrage einleitet, besteht das Ergebnis aus einem einzelnen Wert, der das Ergebnis der in der Into-Klausel angegebenen Aggregatfunktion ist. Wenn in der Into-Klausel mehrere Aggregatfunktionen angegeben werden, wird von der Abfrage ein einzelner Typ mit einer separaten Eigenschaft zurückgegeben, die auf das Ergebnis der einzelnen Aggregatfunktionen in der Into-Klausel verweist. Wenn die Aggregate-Klausel in einer Abfrage als zusätzliche Klausel angegeben wird, verfügt der in der Abfrageauflistung zurückgegebene Typ über eine separate Eigenschaft, die auf das Ergebnis der einzelnen Aggregatfunktionen in der Into-Klausel verweist.

In der folgenden Liste werden die Standardaggregatfunktionen beschrieben, die Sie in der Aggregate-Klausel verwenden können.

Funktion

Beschreibung

All

Gibt true zurück, wenn alle Elemente in der Auflistung eine angegebene Bedingung erfüllen, andernfalls false. Beachten Sie folgendes Beispiel:


Dim customerList1 = Aggregate order In orders
                    Into AllOrdersOver100 = All(order.Total >= 100)


Any

Gibt true zurück, wenn ein Element in der Auflistung eine angegebene Bedingung erfüllt, andernfalls false. Beachten Sie folgendes Beispiel:


Dim customerList2 = From cust In customers
                    Aggregate order In cust.Orders
                    Into AnyOrderOver500 = Any(order.Total >= 500)


Average

Berechnet den Durchschnitt aller Elemente in der Auflistung, oder berechnet für alle Elemente in der Auflistung einen angegebenen Ausdruck. Beachten Sie folgendes Beispiel:


Dim customerOrderAverage = Aggregate order In orders
                           Into Average(order.Total)


Count

Zählt die Anzahl der Elemente in der Auflistung. Sie können einen optionalen Boolean-Ausdruck angeben, um nur die Anzahl der Elemente in der Auflistung zu zählen, die eine Bedingung erfüllen. Beachten Sie folgendes Beispiel:


Dim customerOrderAfter1996 = From cust In customers
                             Aggregate order In cust.Orders
                             Into Count(order.OrderDate > #12/31/1996#)


Group

Verweist auf Abfrageergebnisse, die als Ergebnis einer Group By-Klausel oder einer Group Join-Klausel gruppiert werden. Die Group-Funktion ist nur in der Into-Klausel einer Group By-Klausel oder einer Group Join-Klausel gültig. Weitere Informationen und Beispiele finden Sie unter GROUP BY-Klausel (Visual Basic) und Group Join-Klausel (Visual Basic).

LongCount

Zählt die Anzahl der Elemente in der Auflistung. Sie können einen optionalen Boolean-Ausdruck angeben, um nur die Anzahl der Elemente in der Auflistung zu zählen, die eine Bedingung erfüllen. Gibt das Ergebnis als Long zurück. Ein Beispiel finden Sie unter der Count-Aggregatfunktion.

Max

Berechnet den maximalen Wert in der Auflistung, oder berechnet für alle Elemente in der Auflistung einen angegebenen Ausdruck. Beachten Sie folgendes Beispiel:


Dim customerMaxOrder = Aggregate order In orders
                       Into MaxOrder = Max(order.Total)


Min

Berechnet den minimalen Wert in der Auflistung, oder berechnet für alle Elemente in der Auflistung einen angegebenen Ausdruck. Beachten Sie folgendes Beispiel:


Dim customerMinOrder = From cust In customers
                       Aggregate order In cust.Orders
                       Into MinOrder = Min(order.Total)


Sum

Berechnet die Summe aller Elemente in der Auflistung, oder berechnet für alle Elemente in der Auflistung einen angegebenen Ausdruck. Beachten Sie folgendes Beispiel:


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


Im folgenden Codebeispiel wird veranschaulicht, wie die Aggregate-Klausel verwendet wird, um Aggregatfunktionen auf ein Abfrageergebnis anzuwenden.


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


Sie können in einem Abfrageausdruck eigene benutzerdefinierte Aggregatfunktionen verwenden, indem Sie dem IEnumerable<T>-Typ Erweiterungsmethoden hinzufügen. Die benutzerdefinierte Methode kann dann eine Berechnung oder Operation für die aufzählbare Auflistung durchführen, die auf Ihre Aggregatfunktion verweist. Weitere Informationen über Erweiterungsmethoden finden Sie unter Erweiterungsmethoden (Visual Basic).

Das folgende Codebeispiel enthält beispielsweise eine benutzerdefinierte Aggregatfunktion, die den Median einer Auflistung von Zahlen berechnet. Es gibt zwei Überladungen der Median-Erweiterungsmethode. Die erste Überladung akzeptiert als Eingabe eine Auflistung des Typs IEnumerable(Of Double). Diese Methode wird aufgerufen, wenn die Median-Aggregatfunktion für ein Abfragefeld des Typs Double aufgerufen wird. Der zweiten Überladung der Median-Methode kann ein beliebiger generischer Typ übergeben werden. Die generische Überladung der Median-Methode nimmt einen zweiten Parameter entgegen, der auf den Func(Of T, Double)-Lambdaausdruck verweist, um einen Wert für einen Typ (aus einer Auflistung) auf den entsprechenden Wert des Typs Double zu projizieren. Anschließend wird die Berechnung des Medians an die andere Überladung der Median-Methode delegiert. Weitere Informationen zu Lambdaausdrücken finden Sie unter Lambda-Ausdrücke (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


Das folgende Codebeispiel enthält Beispielabfragen, die die Median-Aggregatfunktion für eine Auflistung des Typs Integer und eine Auflistung des Typs Double aufrufen. Bei der Abfrage, die die Median-Aggregatfunktion für die Auflistung des Typs Double aufruft, wird die Überladung der Median-Methode aufgerufen, die als Eingabe eine Auflistung des Typs Double akzeptiert. Bei der Abfrage, die die Median-Aggregatfunktion für die Auflistung des Typs Integer aufruft, wird die generische Überladung der Median-Methode aufgerufen.


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


Community-Beiträge

HINZUFÜGEN
Anzeigen: