Предложение Aggregate (Visual Basic)Aggregate Clause (Visual Basic)

Применяет один или несколько агрегатных функций к коллекции.Applies one or more aggregate functions to a collection.

СинтаксисSyntax

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

ЧастиParts

ТерминTerm ОпределениеDefinition
element Обязательный.Required. Переменная, используемая для итерации по элементам коллекции.Variable used to iterate through the elements of the collection.
type Необязательный параметр.Optional. Тип параметра element.The type of element. Если тип не указан, тип element выводится из collection.If no type is specified, the type of element is inferred from collection.
collection Обязательный.Required. Ссылается на коллекцию для работы.Refers to the collection to operate on.
clause Необязательный параметр.Optional. Один или несколько предложения запроса, такие как Where предложение для уточнения результатов запроса, чтобы применить предложение aggregate или предложений для.One or more query clauses, such as a Where clause, to refine the query result to apply the aggregate clause or clauses to.
expressionList Обязательный.Required. Одно или несколько разделенных запятыми выражений, которые идентифицируют агрегатную функцию для применения к коллекции.One or more comma-delimited expressions that identify an aggregate function to apply to the collection. Псевдоним можно применять в статистической функции, чтобы указать имя элемента для получения результата запроса.You can apply an alias to an aggregate function to specify a member name for the query result. Если псевдоним не указан, используется имя агрегатной функции.If no alias is supplied, the name of the aggregate function is used. Примеры см. в разделе об агрегатных функциях, далее в этом разделе.For examples, see the section about aggregate functions later in this topic.

ПримечанияRemarks

Aggregate Предложение может использоваться для включения агрегатных функций в запросах.The Aggregate clause can be used to include aggregate functions in your queries. Агрегатные функции выполняют проверку и вычисление на наборе значений и возвращают одиночное значение.Aggregate functions perform checks and computations over a set of values and return a single value. Вычисляемое значение доступны с помощью члена типа результата запроса.You can access the computed value by using a member of the query result type. Стандартные агрегатные функции, которые можно использовать, All, Any, Average, Count, LongCount, Max, Min, и Sum функции.The standard aggregate functions that you can use are the All, Any, Average, Count, LongCount, Max, Min, and Sum functions. Эти функции хорошо знакомы разработчикам, знакомым с помощью статистических функций в SQL.These functions are familiar to developers who are familiar with aggregates in SQL. Они описаны в следующем разделе этой статьи.They are described in the following section of this topic.

Результат агрегатной функции включается в результат запроса как поле типа результата запроса.The result of an aggregate function is included in the query result as a field of the query result type. Можно указать псевдоним для результатов агрегатной функции, чтобы указать имя члена типа результата запроса, который будет содержать значение статистического выражения.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. Если псевдоним не указан, используется имя агрегатной функции.If no alias is supplied, the name of the aggregate function is used.

Aggregate Предложение можно начать запрос, или он может быть включено как дополнительное предложение в запросе.The Aggregate clause can begin a query, or it can be included as an additional clause in a query. Если Aggregate предложение в начале запроса, в результате одно значение, являющееся результатом агрегатной функцией, указанной в 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. Если указано более одной агрегатной функции в Into предложение, запрос возвращает отдельный тип с отдельным свойством для ссылки на результат каждая Агрегатная функция в 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. Если Aggregate предложение включается как дополнительное предложение в запросе, тип возвращаемой коллекции запроса будет иметь отдельные свойства, ссылающиеся на результат каждая Агрегатная функция в 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.

Статистические функцииAggregate Functions

Ниже приведены стандартные агрегатные функции, которые могут использоваться с Aggregate предложение.The following are the standard aggregate functions that can be used with the Aggregate clause.

ВсеAll

Возвращает true все ли элементы в коллекции удовлетворяют указанному условию; в противном случае возвращает false.Returns true if all elements in the collection satisfy a specified condition; otherwise returns false. Ниже представлен пример такого кода.The following is an example:

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

ЛюбойAny

Возвращает true Если любой элемент в коллекции удовлетворяет указанному условию; в противном случае возвращает false.Returns true if any element in the collection satisfies a specified condition; otherwise returns false. Ниже представлен пример такого кода.The following is an example:

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

Метод AverageAverage

Вычисляет среднее значение всех элементов в коллекции, или указанное выражение для всех элементов в коллекции.Computes the average of all elements in the collection, or computes a supplied expression for all elements in the collection. Ниже представлен пример такого кода.The following is an example:

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

КоличествоCount

Подсчитывает количество элементов в коллекции.Counts the number of elements in the collection. Можно указать необязательное Boolean выражение для подсчета числа элементов в коллекции, которые удовлетворяют условию.You can supply an optional Boolean expression to count only the number of elements in the collection that satisfy a condition. Ниже представлен пример такого кода.The following is an example:

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

ГруппаGroup

Ссылается на результаты запроса, сгруппированные в результате Group By или Group Join предложение.Refers to query results that are grouped as a result of a Group By or Group Join clause. Group Функция допустима только в Into предложении Group By или Group Join предложение.The Group function is valid only in the Into clause of a Group By or Group Join clause. Дополнительные сведения и примеры см. в разделе предложение Group и предложение Join группы.For more information and examples, see Group By Clause and Group Join Clause.

LongCountLongCount

Подсчитывает количество элементов в коллекции.Counts the number of elements in the collection. Можно указать необязательное Boolean выражение для подсчета числа элементов в коллекции, которые удовлетворяют условию.You can supply an optional Boolean expression to count only the number of elements in the collection that satisfy a condition. Возвращает результат в виде Long.Returns the result as a Long. Например, см. в разделе Count агрегатной функции.For an example, see the Count aggregate function.

МаксимумMax

Вычисляет максимальное значение из коллекции, или указанное выражение для всех элементов в коллекции.Computes the maximum value from the collection, or computes a supplied expression for all elements in the collection. Ниже представлен пример такого кода.The following is an example:

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

МинимумMin

Вычисляет минимальное значение из коллекции, или указанное выражение для всех элементов в коллекции.Computes the minimum value from the collection, or computes a supplied expression for all elements in the collection. Ниже представлен пример такого кода.The following is an example:

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

SumSum

Вычисляет сумму всех элементов в коллекции, или указанное выражение для всех элементов в коллекции.Computes the sum of all elements in the collection, or computes a supplied expression for all elements in the collection. Ниже представлен пример такого кода.The following is an example:

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

ПримерExample

В следующем примере показано, как использовать Aggregate предложение для применения агрегатных функций к результатам запроса.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

Создание определяемых пользователем агрегатных функцийCreating User-Defined Aggregate Functions

Собственные пользовательские агрегатные функции в выражении запроса можно включить путем добавления методов расширения для IEnumerable<T> типа.You can include your own custom aggregate functions in a query expression by adding extension methods to the IEnumerable<T> type. Пользовательский метод может выполнить расчет или операцию на перечисление коллекции, на которую есть ссылки в агрегатной функции.Your custom method can then perform a calculation or operation on the enumerable collection that has referenced your aggregate function. Дополнительные сведения о методах расширения см. в разделе Методы расширения.For more information about extension methods, see Extension Methods.

К примеру в следующем примере пользовательской агрегатной функции, которая вычисляет значение медианы из коллекции чисел.For example, the following example shows a custom aggregate function that calculates the median value of a collection of numbers. Существуют две перегрузки Median метода расширения.There are two overloads of the Median extension method. Первая перегрузка принимает в качестве входных данных, коллекция элементов типа IEnumerable(Of Double).The first overload accepts, as input, a collection of type IEnumerable(Of Double). Если Median Агрегатная функция вызывается для поля типа Double, этот метод будет вызываться.If the Median aggregate function is called for a query field of type Double, this method will be called. Вторая перегрузка Median метод может передаваться любой универсального типа.The second overload of the Median method can be passed any generic type. Универсальная перегрузка Median метод принимает второй параметр, который ссылается на Func(Of T, Double) лямбда-выражения для проецирования значение для типа (из коллекции), как значение соответствующего типа 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. Затем он делегирует расчет значения медианы другой перегрузкой Median метод.It then delegates the calculation of the median value to the other overload of the Median method. Дополнительные сведения о лямбда-выражениях см. в разделе Лямбда-выражения.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

В следующем примере показано примеры запросов, которые вызывают Median агрегатную функцию в коллекцию типа Integerи коллекция элементов типа 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. Запрос, который вызывает Median агрегатную функцию в коллекции с типом Double вызывает перегрузку Median метод, который принимает в качестве входных данных, коллекция элементов типа 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. Запрос, который вызывает Median агрегатную функцию в коллекции с типом Integer вызывает универсальную перегрузку 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

См. такжеSee also