Aggregate 句 (Visual Basic)Aggregate Clause (Visual Basic)

1 つまたは複数の集計関数をコレクションに適用します。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. 1 つまたは複数の句がクエリなど、Where集計句に適用するクエリの結果を絞り込むの句。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. 1 つまたは複数コンマで区切られた式のコレクションに適用する集計関数を識別します。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.

RemarksRemarks

Aggregateに集計関数をクエリに含める句を使用できます。The Aggregate clause can be used to include aggregate functions in your queries. 集計関数は、値のセットをチェックし、計算を実行し、1 つの値を返します。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. 使用できる標準の集計関数は、 AllAnyAverageCountLongCountMaxMin、および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句がクエリを開始すると、結果は、1 つの値で指定された集計関数の結果では、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句内の各集計関数の結果を参照する個別のプロパティを 1 つの型を返します、クエリ、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)

平均Average

コレクション内のすべての要素の平均を計算するか、またはコレクション内のすべての要素に対して指定された式を計算します。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. 詳細と例については、次を参照してください。 By 句のグループ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. 2 つのオーバー ロードがあります、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. 2 番目のオーバー ロード、Median任意のジェネリック型をメソッドに渡すことができます。The second overload of the Median method can be passed any generic type. ジェネリック オーバー ロード、Medianメソッドが参照する 2 番目のパラメーターを受け取り、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