Aggregate — Klauzula (Visual Basic)Aggregate Clause (Visual Basic)

Stosuje co najmniej jedną funkcję agregującą do kolekcji.Applies one or more aggregate functions to a collection.

SkładniaSyntax

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

CzęściParts

TerminTerm DefinicjaDefinition
element Wymagana.Required. Zmienna używana do iteracji elementów kolekcji.Variable used to iterate through the elements of the collection.
type Opcjonalna.Optional. Typ elementu element.The type of element. Jeśli typ nie zostanie określony, typ element jest wnioskowany z collection.If no type is specified, the type of element is inferred from collection.
collection Wymagana.Required. Odwołuje się do kolekcji, w której ma działać.Refers to the collection to operate on.
clause Opcjonalna.Optional. Co najmniej jedna klauzula zapytania, taka jak klauzula Where, do uściślenia wyniku zapytania, aby zastosować klauzulę agregującą lub klauzulę do.One or more query clauses, such as a Where clause, to refine the query result to apply the aggregate clause or clauses to.
expressionList Wymagana.Required. Jedno lub więcej wyrażeń rozdzielanych przecinkami, które identyfikują funkcję agregującą, która ma zostać zastosowana do kolekcji.One or more comma-delimited expressions that identify an aggregate function to apply to the collection. Można zastosować alias do funkcji agregującej, aby określić nazwę elementu członkowskiego dla wyniku zapytania.You can apply an alias to an aggregate function to specify a member name for the query result. Jeśli nie podano aliasu, używana jest nazwa funkcji agregującej.If no alias is supplied, the name of the aggregate function is used. Przykłady zawiera sekcja dotycząca funkcji agregujących w dalszej części tego tematu.For examples, see the section about aggregate functions later in this topic.

UwagiRemarks

Klauzula Aggregate może służyć do uwzględnienia funkcji agregujących w zapytaniach.The Aggregate clause can be used to include aggregate functions in your queries. Funkcje agregujące wykonują operacje sprawdzania i obliczeń na zestawie wartości i zwracają pojedynczą wartość.Aggregate functions perform checks and computations over a set of values and return a single value. Możesz uzyskać dostęp do obliczonej wartości przy użyciu elementu członkowskiego typu wyników zapytania.You can access the computed value by using a member of the query result type. Standardowe funkcje agregujące, których można użyć, to All, Any, Average, Count, LongCount, Max, Mini Sum.The standard aggregate functions that you can use are the All, Any, Average, Count, LongCount, Max, Min, and Sum functions. Te funkcje są znane dla deweloperów, którzy znają agregacje w programie SQL Server.These functions are familiar to developers who are familiar with aggregates in SQL. Opisano je w poniższej sekcji tego tematu.They are described in the following section of this topic.

Wynik funkcji agregującej jest uwzględniany w wyniku zapytania jako pole typu wyniku zapytania.The result of an aggregate function is included in the query result as a field of the query result type. Można podać alias dla wyniku funkcji agregującej, aby określić nazwę elementu członkowskiego typu wyników zapytania, który będzie przechowywać wartość zagregowaną.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. Jeśli nie podano aliasu, używana jest nazwa funkcji agregującej.If no alias is supplied, the name of the aggregate function is used.

Klauzula Aggregate może rozpoczynać zapytanie lub może być dołączana jako dodatkowa klauzula w zapytaniu.The Aggregate clause can begin a query, or it can be included as an additional clause in a query. Jeśli klauzula Aggregate rozpoczyna kwerendę, wynikiem jest pojedyncza wartość, która jest wynikiem funkcji agregującej określonej w klauzuli Into.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. Jeśli w klauzuli Into określono więcej niż jedną funkcję agregującą, zapytanie zwróci pojedynczy typ z oddzielną właściwością, aby odwołać wynik każdej funkcji agregującej w klauzuli Into.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. Jeśli klauzula Aggregate jest uwzględniona jako dodatkowa klauzula w zapytaniu, typ zwracany w kolekcji zapytań będzie miał osobną właściwość, aby odwołać się do wyniku każdej funkcji agregującej w klauzuli Into.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.

Funkcje agregująceAggregate Functions

Poniżej znajdują się standardowe funkcje agregujące, które mogą być używane z klauzulą Aggregate.The following are the standard aggregate functions that can be used with the Aggregate clause.

WszyscyAll

Zwraca true, jeśli wszystkie elementy w kolekcji spełniają określony warunek; w przeciwnym razie zwraca false.Returns true if all elements in the collection satisfy a specified condition; otherwise returns false. Oto przykład:The following is an example:

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

DowolneAny

Zwraca true, jeśli którykolwiek element w kolekcji spełnia określony warunek; w przeciwnym razie zwraca false.Returns true if any element in the collection satisfies a specified condition; otherwise returns false. Oto przykład:The following is an example:

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

ŚredniaAverage

Oblicza średnią wszystkich elementów w kolekcji lub oblicza dostarczone wyrażenie dla wszystkich elementów w kolekcji.Computes the average of all elements in the collection, or computes a supplied expression for all elements in the collection. Oto przykład:The following is an example:

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

LicznikCount

Zlicza elementy w kolekcji.Counts the number of elements in the collection. Można podać opcjonalne wyrażenie Boolean, aby zliczać tylko liczbę elementów w kolekcji, które spełniają warunek.You can supply an optional Boolean expression to count only the number of elements in the collection that satisfy a condition. Oto przykład:The following is an example:

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

GrupaGroup

Odwołuje się do wyników zapytania, które są pogrupowane w wyniku klauzuli Group By lub Group Join.Refers to query results that are grouped as a result of a Group By or Group Join clause. Funkcja Group jest prawidłowa tylko w klauzuli Into klauzuli Group By lub Group Join.The Group function is valid only in the Into clause of a Group By or Group Join clause. Aby uzyskać więcej informacji i przykładów, zobacz klauzule Group by i Group Join.For more information and examples, see Group By Clause and Group Join Clause.

LongCountLongCount

Zlicza elementy w kolekcji.Counts the number of elements in the collection. Można podać opcjonalne wyrażenie Boolean, aby zliczać tylko liczbę elementów w kolekcji, które spełniają warunek.You can supply an optional Boolean expression to count only the number of elements in the collection that satisfy a condition. Zwraca wynik jako Long.Returns the result as a Long. Aby zapoznać się z przykładem, zobacz Count funkcji agregującej.For an example, see the Count aggregate function.

Maks.Max

Oblicza wartość maksymalną z kolekcji lub oblicza dostarczone wyrażenie dla wszystkich elementów w kolekcji.Computes the maximum value from the collection, or computes a supplied expression for all elements in the collection. Oto przykład:The following is an example:

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

Min.Min

Oblicza wartość minimalną kolekcji lub oblicza dostarczone wyrażenie dla wszystkich elementów w kolekcji.Computes the minimum value from the collection, or computes a supplied expression for all elements in the collection. Oto przykład:The following is an example:

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

SumaSum

Oblicza sumę wszystkich elementów w kolekcji lub oblicza dostarczone wyrażenie dla wszystkich elementów w kolekcji.Computes the sum of all elements in the collection, or computes a supplied expression for all elements in the collection. Oto przykład:The following is an example:

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

PrzykładExample

Poniższy przykład pokazuje, jak używać klauzuli Aggregate do zastosowania funkcji agregujących do wyniku zapytania.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

Tworzenie funkcji agregujących zdefiniowanych przez użytkownikaCreating User-Defined Aggregate Functions

W wyrażeniu zapytania można uwzględnić własne niestandardowe funkcje agregujące, dodając metody rozszerzające do typu IEnumerable<T>.You can include your own custom aggregate functions in a query expression by adding extension methods to the IEnumerable<T> type. Metoda niestandardowa może następnie wykonać obliczenia lub operacje na wyliczalnej kolekcji, która przywołuje funkcję agregującą.Your custom method can then perform a calculation or operation on the enumerable collection that has referenced your aggregate function. Aby uzyskać więcej informacji na temat metod rozszerzających, zobacz metody rozszerzenia.For more information about extension methods, see Extension Methods.

Na przykład poniższy przykład pokazuje niestandardową funkcję agregującą, która oblicza wartość mediany kolekcji liczb.For example, the following example shows a custom aggregate function that calculates the median value of a collection of numbers. Istnieją dwa przeciążenia metody rozszerzenia Median.There are two overloads of the Median extension method. Pierwsze przeciążenie przyjmuje jako dane wejściowe, Kolekcja typu IEnumerable(Of Double).The first overload accepts, as input, a collection of type IEnumerable(Of Double). Jeśli Median funkcja agregująca jest wywoływana dla pola zapytania typu Double, ta metoda zostanie wywołana.If the Median aggregate function is called for a query field of type Double, this method will be called. Drugie Przeciążenie metody Median może być przekazanie dowolnego typu ogólnego.The second overload of the Median method can be passed any generic type. Ogólne Przeciążenie metody Median przyjmuje drugi parametr, który odwołuje się do Func(Of T, Double) wyrażenie lambda w celu zaprojektowania wartości dla typu (z kolekcji) jako odpowiadającej wartości typu Double.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. Następnie przydeleguje obliczenie wartości mediany do innego przeciążenia metody Median.It then delegates the calculation of the median value to the other overload of the Median method. Aby uzyskać więcej informacji na temat wyrażeń lambda, zobacz lambda Expressions.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

Poniższy przykład pokazuje przykładowe zapytania, które wywołują funkcję agregującą Median w kolekcji typu Integer, i kolekcję typu Double.The following example shows sample queries that call the Median aggregate function on a collection of type Integer, and a collection of type Double. Zapytanie, które wywołuje funkcję agregującą Median w kolekcji typu Double wywołuje Przeciążenie metody Median, która akceptuje, jako dane wejściowe, Kolekcja typu Double.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. Zapytanie, które wywołuje funkcję agregującą Median w kolekcji typu Integer wywołuje ogólne Przeciążenie metody Median.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

Zobacz takżeSee also