Aggregate-Klausel (Visual Basic)Aggregate Clause (Visual Basic)

Wendet eine oder mehrere Aggregatfunktionen auf eine Auflistung an.Applies one or more aggregate functions to a collection.

SyntaxSyntax

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

-KomponentenParts

BegriffTerm DefinitionDefinition
element ErforderlichRequired. Variable, mit der die Elemente der Auflistung durchlaufen werden.Variable used to iterate through the elements of the collection.
type Optional.Optional. Der element-Typ.The type of element. Wenn kein Typ angegeben ist, wird der Typ der element von collectionabgeleitet.If no type is specified, the type of element is inferred from collection.
collection ErforderlichRequired. Verweist auf die Auflistung, die verwendet werden soll.Refers to the collection to operate on.
clause Optional.Optional. Eine oder mehrere Abfrage Klauseln, wie z. b. eine Where-Klausel, um das Abfrageergebnis zum Anwenden der Aggregat Klausel oder-Klauseln zu verfeinern.One or more query clauses, such as a Where clause, to refine the query result to apply the aggregate clause or clauses to.
expressionList ErforderlichRequired. Mindestens ein durch Trennzeichen getrennter Ausdruck, der eine Aggregatfunktion identifiziert, die auf die Auflistung angewendet werden soll.One or more comma-delimited expressions that identify an aggregate function to apply to the collection. Sie können einen Alias auf eine Aggregatfunktion anwenden, um einen Elementnamen für das Abfrageergebnis anzugeben.You can apply an alias to an aggregate function to specify a member name for the query result. Wenn kein Alias angegeben wird, wird der Name der Aggregatfunktion verwendet.If no alias is supplied, the name of the aggregate function is used. Beispiele finden Sie im Abschnitt zu Aggregatfunktionen weiter unten in diesem Thema.For examples, see the section about aggregate functions later in this topic.

HinweiseRemarks

Die Aggregate-Klausel kann verwendet werden, um Aggregatfunktionen in Ihre Abfragen einzubeziehen.The Aggregate clause can be used to include aggregate functions in your queries. Aggregatfunktionen führen Überprüfungen und Berechnungen für einen Satz von Werten aus und geben einen einzelnen Wert zurück.Aggregate functions perform checks and computations over a set of values and return a single value. Sie können auf den berechneten Wert zugreifen, indem Sie einen Member des Abfrageergebnis Typs verwenden.You can access the computed value by using a member of the query result type. Die standardmäßigen Aggregatfunktionen, die Sie verwenden können, sind die Funktionen All, Any, Average, Count, LongCount, Max, Minund Sum.The standard aggregate functions that you can use are the All, Any, Average, Count, LongCount, Max, Min, and Sum functions. Diese Funktionen sind Entwicklern vertraut, die mit Aggregaten in SQL vertraut sind.These functions are familiar to developers who are familiar with aggregates in SQL. Diese werden im folgenden Abschnitt dieses Themas beschrieben.They are described in the following section of this topic.

Das Ergebnis einer Aggregatfunktion ist im Abfrageergebnis als Feld des Abfrageergebnis Typs enthalten.The result of an aggregate function is included in the query result as a field of the query result type. Sie können einen Alias für das Aggregat Funktionsergebnis angeben, um den Namen des Members des Abfrageergebnis Typs anzugeben, der den Aggregatwert enthalten soll.You can supply an alias for the aggregate function result to specify the name of the member of the query result type that will hold the aggregate value. Wenn kein Alias angegeben wird, wird der Name der Aggregatfunktion verwendet.If no alias is supplied, the name of the aggregate function is used.

Die Aggregate-Klausel kann eine Abfrage beginnen, oder Sie kann als zusätzliche Klausel in eine Abfrage eingeschlossen werden.The Aggregate clause can begin a query, or it can be included as an additional clause in a query. Wenn die Aggregate-Klausel eine Abfrage startet, ist das Ergebnis ein einzelner Wert, der das Ergebnis der in der Into-Klausel angegebenen Aggregatfunktion ist.If the Aggregate clause begins a query, the result is a single value that is the result of the aggregate function specified in the Into clause. Wenn in der Into-Klausel mehr als eine Aggregatfunktion angegeben wird, gibt die Abfrage einen einzelnen Typ mit einer separaten Eigenschaft zurück, um auf das Ergebnis jeder Aggregatfunktion in der Into-Klausel zu verweisen.If more than one aggregate function is specified in the Into clause, the query returns a single type with a separate property to reference the result of each aggregate function in the Into clause. Wenn die Aggregate-Klausel als zusätzliche Klausel in einer Abfrage enthalten ist, verfügt der in der Abfrage Auflistung zurückgegebene Typ über eine separate Eigenschaft, um auf das Ergebnis jeder Aggregatfunktion in der Into-Klausel zu verweisen.If the Aggregate clause is included as an additional clause in a query, the type returned in the query collection will have a separate property to reference the result of each aggregate function in the Into clause.

AggregatfunktionenAggregate Functions

Die folgenden standardmäßigen Aggregatfunktionen können mit der Aggregate-Klausel verwendet werden.The following are the standard aggregate functions that can be used with the Aggregate clause.

AlleAll

Gibt true zurück, wenn alle Elemente in der Auflistung eine angegebene Bedingung erfüllen. Andernfalls wird falsezurückgegeben.Returns true if all elements in the collection satisfy a specified condition; otherwise returns false. Hier ein Beispiel:The following is an example:

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

BeliebigAny

Gibt true zurück, wenn ein beliebiges Element in der Auflistung eine angegebene Bedingung erfüllt. Andernfalls wird falsezurückgegeben.Returns true if any element in the collection satisfies a specified condition; otherwise returns false. Hier ein Beispiel:The following is an example:

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

DurchschnittAverage

Berechnet den Durchschnitt aller Elemente in der Auflistung oder berechnet einen angegebenen Ausdruck für alle Elemente in der Auflistung.Computes the average of all elements in the collection, or computes a supplied expression for all elements in the collection. Hier ein Beispiel:The following is an example:

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

AnzahlCount

Zählt die Anzahl der Elemente in der Auflistung.Counts the number of elements in the collection. 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.You can supply an optional Boolean expression to count only the number of elements in the collection that satisfy a condition. Hier ein Beispiel:The following is an example:

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

GruppeGroup

Bezieht sich auf Abfrageergebnisse, die als Ergebnis einer Group By-oder Group Join-Klausel gruppiert werden.Refers to query results that are grouped as a result of a Group By or Group Join clause. Die Group-Funktion ist nur in der Into-Klausel einer Group By oder Group Join-Klausel gültig.The Group function is valid only in the Into clause of a Group By or Group Join clause. Weitere Informationen und Beispiele finden Sie unter Group By-Klausel und Group Join-Klausel.For more information and examples, see Group By Clause and Group Join Clause.

LongCountLongCount

Zählt die Anzahl der Elemente in der Auflistung.Counts the number of elements in the collection. 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.You can supply an optional Boolean expression to count only the number of elements in the collection that satisfy a condition. Gibt das Ergebnis als Longzurück.Returns the result as a Long. Ein Beispiel finden Sie in der Count-Aggregatfunktion.For an example, see the Count aggregate function.

MaxMax

Berechnet den maximalen Wert aus der Auflistung oder berechnet einen angegebenen Ausdruck für alle Elemente in der Auflistung.Computes the maximum value from the collection, or computes a supplied expression for all elements in the collection. Hier ein Beispiel:The following is an example:

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

MinMin

Berechnet den minimalen Wert aus der Auflistung oder berechnet einen angegebenen Ausdruck für alle Elemente in der Auflistung.Computes the minimum value from the collection, or computes a supplied expression for all elements in the collection. Hier ein Beispiel:The following is an example:

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

SumSum

Berechnet die Summe aller Elemente in der Auflistung oder berechnet einen angegebenen Ausdruck für alle Elemente in der Auflistung.Computes the sum of all elements in the collection, or computes a supplied expression for all elements in the collection. Hier ein Beispiel:The following is an example:

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

BeispielExample

Im folgenden Beispiel wird gezeigt, wie Sie mit der Aggregate-Klausel Aggregatfunktionen auf ein Abfrageergebnis anwenden können.The following example shows how to use the Aggregate clause to apply aggregate functions to a query result.

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

Erstellen von benutzerdefinierten AggregatfunktionenCreating User-Defined Aggregate Functions

Sie können eigene benutzerdefinierte Aggregatfunktionen in einen Abfrage Ausdruck einschließen, indem Sie dem IEnumerable<T>-Typ Erweiterungs Methoden hinzufügen.You can include your own custom aggregate functions in a query expression by adding extension methods to the IEnumerable<T> type. Die benutzerdefinierte Methode kann dann eine Berechnung oder einen Vorgang für die Aufzähl Bare-Auflistung ausführen, die auf die Aggregatfunktion verwiesen hat.Your custom method can then perform a calculation or operation on the enumerable collection that has referenced your aggregate function. Weitere Informationen zu Erweiterungsmethoden finden Sie unter Extension Methods (Erweiterungsmethoden).For more information about extension methods, see Extension Methods.

Das folgende Beispiel zeigt beispielsweise eine benutzerdefinierte Aggregatfunktion, die den Medianwert einer Auflistung von Zahlen berechnet.For example, the following example shows a custom aggregate function that calculates the median value of a collection of numbers. Es gibt zwei über Ladungen der Median-Erweiterungsmethode.There are two overloads of the Median extension method. Die erste Überladung akzeptiert als Eingabe eine Auflistung vom Typ IEnumerable(Of Double).The first overload accepts, as input, a collection of type IEnumerable(Of Double). Wenn die Median Aggregatfunktion für ein Abfragefeld vom Typ Doubleaufgerufen wird, wird diese Methode aufgerufen.If the Median aggregate function is called for a query field of type Double, this method will be called. Der zweiten Überladung der Median-Methode können alle generischen Typen übergebenen werden.The second overload of the Median method can be passed any generic type. Die generische Überladung der Median-Methode nimmt einen zweiten Parameter an, der auf den Func(Of T, Double) Lambda-Ausdruck verweist, um einen Wert für einen Typ (aus einer Auflistung) als entsprechenden Wert des Typs Doublezu projizieren.The generic overload of the Median method takes a second parameter that references the Func(Of T, Double) lambda expression to project a value for a type (from a collection) as the corresponding value of type Double. Anschließend wird die Berechnung des Median Werts an die andere Überladung der Median Methode delegiert.It then delegates the calculation of the median value to the other overload of the Median method. Weitere Informationen zu Lambdaausdrücken finden Sie unter Lambda Expressions (Lambdaausdrücke).For more information about lambda expressions, see Lambda Expressions.

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 Beispiel zeigt Beispielabfragen, die die Median Aggregatfunktion für eine Auflistung vom Typ "Integer" und eine Auflistung vom Typ "Double" aufzurufen.The following example shows sample queries that call the Median aggregate function on a collection of type Integer, and a collection of type Double. Die Abfrage, die die Median Aggregatfunktion für die-Auflistung vom Typ aufruft Double die-Überladung der Median-Methode aufruft, die als Eingabe eine Auflistung vom Typ Doubleakzeptiert.The query that calls the Median aggregate function on the collection of type Double calls the overload of the Median method that accepts, as input, a collection of type Double. Die Abfrage, die die Median Aggregatfunktion für die-Auflistung vom Typ aufruft Integer die generische Überladung der Median-Methode aufruft.The query that calls the Median aggregate function on the collection of type Integer calls the generic overload of the Median method.

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

Siehe auchSee also