Queryable.Aggregate Queryable.Aggregate Queryable.Aggregate Queryable.Aggregate Method

定義

多載

Aggregate<TSource,TAccumulate,TResult>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>, Expression<Func<TAccumulate,TResult>>) Aggregate<TSource,TAccumulate,TResult>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>, Expression<Func<TAccumulate,TResult>>) Aggregate<TSource,TAccumulate,TResult>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>, Expression<Func<TAccumulate,TResult>>) Aggregate<TSource,TAccumulate,TResult>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>, Expression<Func<TAccumulate,TResult>>)

將累加函式套用到序列上。Applies an accumulator function over a sequence. 使用指定的值做為初始累加值,並使用指定的函式來選取結果值。The specified seed value is used as the initial accumulator value, and the specified function is used to select the result value.

Aggregate<TSource,TAccumulate>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>) Aggregate<TSource,TAccumulate>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>) Aggregate<TSource,TAccumulate>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>) Aggregate<TSource,TAccumulate>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>)

將累加函式套用到序列上。Applies an accumulator function over a sequence. 使用指定的初始值做為初始累加值。The specified seed value is used as the initial accumulator value.

Aggregate<TSource>(IQueryable<TSource>, Expression<Func<TSource,TSource,TSource>>) Aggregate<TSource>(IQueryable<TSource>, Expression<Func<TSource,TSource,TSource>>) Aggregate<TSource>(IQueryable<TSource>, Expression<Func<TSource,TSource,TSource>>) Aggregate<TSource>(IQueryable<TSource>, Expression<Func<TSource,TSource,TSource>>)

將累加函式套用到序列上。Applies an accumulator function over a sequence.

Aggregate<TSource,TAccumulate,TResult>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>, Expression<Func<TAccumulate,TResult>>) Aggregate<TSource,TAccumulate,TResult>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>, Expression<Func<TAccumulate,TResult>>) Aggregate<TSource,TAccumulate,TResult>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>, Expression<Func<TAccumulate,TResult>>) Aggregate<TSource,TAccumulate,TResult>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>, Expression<Func<TAccumulate,TResult>>)

將累加函式套用到序列上。Applies an accumulator function over a sequence. 使用指定的值做為初始累加值,並使用指定的函式來選取結果值。The specified seed value is used as the initial accumulator value, and the specified function is used to select the result value.

public:
generic <typename TSource, typename TAccumulate, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static TResult Aggregate(System::Linq::IQueryable<TSource> ^ source, TAccumulate seed, System::Linq::Expressions::Expression<Func<TAccumulate, TSource, TAccumulate> ^> ^ func, System::Linq::Expressions::Expression<Func<TAccumulate, TResult> ^> ^ selector);
public static TResult Aggregate<TSource,TAccumulate,TResult> (this System.Linq.IQueryable<TSource> source, TAccumulate seed, System.Linq.Expressions.Expression<Func<TAccumulate,TSource,TAccumulate>> func, System.Linq.Expressions.Expression<Func<TAccumulate,TResult>> selector);
static member Aggregate : System.Linq.IQueryable<'Source> * 'Accumulate * System.Linq.Expressions.Expression<Func<'Accumulate, 'Source, 'Accumulate>> * System.Linq.Expressions.Expression<Func<'Accumulate, 'Result>> -> 'Result
<Extension()>
Public Function Aggregate(Of TSource, TAccumulate, TResult) (source As IQueryable(Of TSource), seed As TAccumulate, func As Expression(Of Func(Of TAccumulate, TSource, TAccumulate)), selector As Expression(Of Func(Of TAccumulate, TResult))) As TResult

類型參數

TSource

source 項目的類型。The type of the elements of source.

TAccumulate

累積值的類型。The type of the accumulator value.

TResult

結果值的類型。The type of the resulting value.

參數

source
IQueryable<TSource>

所要彙總的序列。A sequence to aggregate over.

seed
TAccumulate TAccumulate TAccumulate TAccumulate

初始累積值。The initial accumulator value.

func
Expression<Func<TAccumulate,TSource,TAccumulate>>

要在每個項目上叫用的累加函式。An accumulator function to invoke on each element.

selector
Expression<Func<TAccumulate,TResult>>

用來將最終累加值轉換成結果值的函式。A function to transform the final accumulator value into the result value.

傳回

TResult TResult TResult TResult

轉換後的最終累加值。The transformed final accumulator value.

例外狀況

sourcefuncselectornullsource or func or selector is null.

範例

下列程式碼範例示範如何使用Aggregate<TSource,TAccumulate,TResult>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>, Expression<Func<TAccumulate,TResult>>)來套用累計函數和結果選取器。The following code example demonstrates how to use Aggregate<TSource,TAccumulate,TResult>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>, Expression<Func<TAccumulate,TResult>>) to apply an accumulator function and a result selector.

string[] fruits = { "apple", "mango", "orange", "passionfruit", "grape" };

// Determine whether any string in the array is longer than "banana".
string longestName =
    fruits.AsQueryable().Aggregate(
    "banana",
    (longest, next) => next.Length > longest.Length ? next : longest,
    // Return the final result as an uppercase string.
    fruit => fruit.ToUpper()
    );

Console.WriteLine(
    "The fruit with the longest name is {0}.",
    longestName);

// This code produces the following output:
//
// The fruit with the longest name is PASSIONFRUIT. 

Dim fruits() As String = {"apple", "mango", "orange", "passionfruit", "grape"}

' Determine whether any string in the array is longer than "banana".
Dim longestName As String = _
    fruits.AsQueryable().Aggregate( _
    "banana", _
    Function(ByVal longest, ByVal fruit) IIf(fruit.Length > longest.Length, fruit, longest), _
    Function(ByVal fruit) fruit.ToUpper() _
)

MsgBox(String.Format( _
    "The fruit with the longest name is {0}.", longestName) _
)

' This code produces the following output:
'
' The fruit with the longest name is PASSIONFRUIT. 

備註

這個方法至少有一個類型Expression<TDelegate>的參數, 其類型引數是其中一個Func<T,TResult>類型。This method has at least one parameter of type Expression<TDelegate> whose type argument is one of the Func<T,TResult> types. 針對這些參數, 您可以傳入 lambda 運算式, 它會編譯成Expression<TDelegate>For these parameters, you can pass in a lambda expression and it will be compiled to an Expression<TDelegate>.

方法會產生, 其代表以Aggregate<TSource,TAccumulate,TResult>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>, Expression<Func<TAccumulate,TResult>>)結構化泛型方法的方式呼叫本身。 MethodCallExpression Aggregate<TSource,TAccumulate,TResult>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>, Expression<Func<TAccumulate,TResult>>)The Aggregate<TSource,TAccumulate,TResult>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>, Expression<Func<TAccumulate,TResult>>) method generates a MethodCallExpression that represents calling Aggregate<TSource,TAccumulate,TResult>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>, Expression<Func<TAccumulate,TResult>>) itself as a constructed generic method. 然後, 它會MethodCallExpression將傳遞Execute<TResult>(Expression)至由Provider source參數IQueryProvider的屬性所表示之的方法。It then passes the MethodCallExpression to the Execute<TResult>(Expression) method of the IQueryProvider represented by the Provider property of the source parameter.

因執行代表呼叫Aggregate<TSource,TAccumulate,TResult>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>, Expression<Func<TAccumulate,TResult>>)之運算式樹狀架構而產生的查詢行為, 取決於source參數類型的實作為。The query behavior that occurs as a result of executing an expression tree that represents calling Aggregate<TSource,TAccumulate,TResult>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>, Expression<Func<TAccumulate,TResult>>) depends on the implementation of the type of the source parameter. 預期的行為是將指定func的函式套用至來源序列中的每個值, 並傳回累積的值。The expected behavior is that the specified function, func, is applied to each value in the source sequence and the accumulated value is returned. 參數是用來做為累積值的種子值, 其對應于中func的第一個參數。 seedThe seed parameter is used as the seed value for the accumulated value, which corresponds to the first parameter in func. 最後累積的值會傳遞至selector以取得結果值。The final accumulated value is passed to selector to obtain the result value.

為了簡化常見的匯總作業, 標準查詢運算子的集合也包含兩個計數方法Count : LongCount和, 以及四個數值Min匯總Sum方法Max, 亦即、和AverageTo simplify common aggregation operations, the set of standard query operators also includes two counting methods, Count and LongCount, and four numeric aggregation methods, namely Max, Min, Sum, and Average.

Aggregate<TSource,TAccumulate>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>) Aggregate<TSource,TAccumulate>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>) Aggregate<TSource,TAccumulate>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>) Aggregate<TSource,TAccumulate>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>)

將累加函式套用到序列上。Applies an accumulator function over a sequence. 使用指定的初始值做為初始累加值。The specified seed value is used as the initial accumulator value.

public:
generic <typename TSource, typename TAccumulate>
[System::Runtime::CompilerServices::Extension]
 static TAccumulate Aggregate(System::Linq::IQueryable<TSource> ^ source, TAccumulate seed, System::Linq::Expressions::Expression<Func<TAccumulate, TSource, TAccumulate> ^> ^ func);
public static TAccumulate Aggregate<TSource,TAccumulate> (this System.Linq.IQueryable<TSource> source, TAccumulate seed, System.Linq.Expressions.Expression<Func<TAccumulate,TSource,TAccumulate>> func);
static member Aggregate : System.Linq.IQueryable<'Source> * 'Accumulate * System.Linq.Expressions.Expression<Func<'Accumulate, 'Source, 'Accumulate>> -> 'Accumulate
<Extension()>
Public Function Aggregate(Of TSource, TAccumulate) (source As IQueryable(Of TSource), seed As TAccumulate, func As Expression(Of Func(Of TAccumulate, TSource, TAccumulate))) As TAccumulate

類型參數

TSource

source 項目的類型。The type of the elements of source.

TAccumulate

累積值的類型。The type of the accumulator value.

參數

source
IQueryable<TSource>

所要彙總的序列。A sequence to aggregate over.

seed
TAccumulate TAccumulate TAccumulate TAccumulate

初始累積值。The initial accumulator value.

func
Expression<Func<TAccumulate,TSource,TAccumulate>>

要在每個項目上叫用的累加函式。An accumulator function to invoke on each element.

傳回

TAccumulate TAccumulate TAccumulate TAccumulate

最終累積值。The final accumulator value.

例外狀況

sourcefuncnullsource or func is null.

範例

下列程式碼範例示範當提供種子Aggregate<TSource,TAccumulate>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>)值給函式時, 如何使用來套用累計函數。The following code example demonstrates how to use Aggregate<TSource,TAccumulate>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>) to apply an accumulator function when a seed value is provided to the function.

int[] ints = { 4, 8, 8, 3, 9, 0, 7, 8, 2 };

// Count the even numbers in the array, using a seed value of 0.
int numEven =
    ints.AsQueryable().Aggregate(
    0,
    (total, next) => next % 2 == 0 ? total + 1 : total
    );

Console.WriteLine("The number of even integers is: {0}", numEven);

// This code produces the following output:
//
// The number of even integers is: 6 

Dim ints() As Integer = {4, 8, 8, 3, 9, 0, 7, 8, 2}

' Count the even numbers in the array, using a seed value of 0.
Dim numEven As Integer = _
    ints.AsQueryable().Aggregate( _
        0, _
        Function(ByVal total, ByVal number) _
            IIf(number Mod 2 = 0, total + 1, total) _
    )

MsgBox(String.Format("The number of even integers is: {0}", numEven))

' This code produces the following output:
'
' The number of even integers is: 6 

備註

這個方法至少有一個類型Expression<TDelegate>的參數, 其類型引數是其中一個Func<T,TResult>類型。This method has at least one parameter of type Expression<TDelegate> whose type argument is one of the Func<T,TResult> types. 針對這些參數, 您可以傳入 lambda 運算式, 它會編譯成Expression<TDelegate>For these parameters, you can pass in a lambda expression and it will be compiled to an Expression<TDelegate>.

方法會產生, 其代表以Aggregate<TSource,TAccumulate>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>)結構化泛型方法的方式呼叫本身。 MethodCallExpression Aggregate<TSource,TAccumulate>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>)The Aggregate<TSource,TAccumulate>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>) method generates a MethodCallExpression that represents calling Aggregate<TSource,TAccumulate>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>) itself as a constructed generic method. 然後, 它會MethodCallExpression將傳遞Execute<TResult>(Expression)至由Provider source參數IQueryProvider的屬性所表示之的方法。It then passes the MethodCallExpression to the Execute<TResult>(Expression) method of the IQueryProvider represented by the Provider property of the source parameter.

因執行代表呼叫Aggregate<TSource,TAccumulate>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>)之運算式樹狀架構而產生的查詢行為, 取決於source參數類型的實作為。The query behavior that occurs as a result of executing an expression tree that represents calling Aggregate<TSource,TAccumulate>(IQueryable<TSource>, TAccumulate, Expression<Func<TAccumulate,TSource,TAccumulate>>) depends on the implementation of the type of the source parameter. 預期的行為是將指定func的函式套用至來源序列中的每個值, 並傳回累積的值。The expected behavior is that the specified function, func, is applied to each value in the source sequence and the accumulated value is returned. 參數是用來做為累積值的種子值, 其對應于中func的第一個參數。 seedThe seed parameter is used as the seed value for the accumulated value, which corresponds to the first parameter in func.

為了簡化常見的匯總作業, 標準查詢運算子的集合也包含兩個計數方法Count : LongCount和, 以及四個數值Min匯總Sum方法Max, 亦即、和AverageTo simplify common aggregation operations, the set of standard query operators also includes two counting methods, Count and LongCount, and four numeric aggregation methods, namely Max, Min, Sum, and Average.

Aggregate<TSource>(IQueryable<TSource>, Expression<Func<TSource,TSource,TSource>>) Aggregate<TSource>(IQueryable<TSource>, Expression<Func<TSource,TSource,TSource>>) Aggregate<TSource>(IQueryable<TSource>, Expression<Func<TSource,TSource,TSource>>) Aggregate<TSource>(IQueryable<TSource>, Expression<Func<TSource,TSource,TSource>>)

將累加函式套用到序列上。Applies an accumulator function over a sequence.

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static TSource Aggregate(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TSource, TSource> ^> ^ func);
public static TSource Aggregate<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TSource,TSource>> func);
static member Aggregate : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Source, 'Source>> -> 'Source
<Extension()>
Public Function Aggregate(Of TSource) (source As IQueryable(Of TSource), func As Expression(Of Func(Of TSource, TSource, TSource))) As TSource

類型參數

TSource

source 項目的類型。The type of the elements of source.

參數

source
IQueryable<TSource>

所要彙總的序列。A sequence to aggregate over.

func
Expression<Func<TSource,TSource,TSource>>

要套用到每個項目的累加函式。An accumulator function to apply to each element.

傳回

TSource TSource TSource TSource

最終累積值。The final accumulator value.

例外狀況

sourcefuncnullsource or func is null.

source 沒有包含任何項目。source contains no elements.

範例

下列程式碼範例示範如何使用Aggregate<TSource>(IQueryable<TSource>, Expression<Func<TSource,TSource,TSource>>) , 從字串陣列建立句子。The following code example demonstrates how to use Aggregate<TSource>(IQueryable<TSource>, Expression<Func<TSource,TSource,TSource>>) to build a sentence from an array of strings.

string sentence = "the quick brown fox jumps over the lazy dog";

// Split the string into individual words.
string[] words = sentence.Split(' ');

// Use Aggregate() to prepend each word to the beginning of the 
// new sentence to reverse the word order.
string reversed =
    words.AsQueryable().Aggregate(
    (workingSentence, next) => next + " " + workingSentence
    );

Console.WriteLine(reversed);

// This code produces the following output:
//
// dog lazy the over jumps fox brown quick the 

Dim sentence As String = "the quick brown fox jumps over the lazy dog"

' Split the string into individual words.
Dim words() As String = sentence.Split(" "c)

' Use Aggregate() to prepend each word to the beginning of the 
' new sentence to reverse the word order.
Dim reversed As String = _
    words.AsQueryable().Aggregate( _
        Function(ByVal workingSentence, ByVal nextWord) nextWord & " " & workingSentence _
    )

MsgBox(reversed)

' This code produces the following output:
'
' dog lazy the over jumps fox brown quick the

備註

這個方法至少有一個類型Expression<TDelegate>的參數, 其類型引數是其中一個Func<T,TResult>類型。This method has at least one parameter of type Expression<TDelegate> whose type argument is one of the Func<T,TResult> types. 針對這些參數, 您可以傳入 lambda 運算式, 它會編譯成Expression<TDelegate>For these parameters, you can pass in a lambda expression and it will be compiled to an Expression<TDelegate>.

方法會產生, 其代表以Aggregate<TSource>(IQueryable<TSource>, Expression<Func<TSource,TSource,TSource>>)結構化泛型方法的方式呼叫本身。 MethodCallExpression Aggregate<TSource>(IQueryable<TSource>, Expression<Func<TSource,TSource,TSource>>)The Aggregate<TSource>(IQueryable<TSource>, Expression<Func<TSource,TSource,TSource>>) method generates a MethodCallExpression that represents calling Aggregate<TSource>(IQueryable<TSource>, Expression<Func<TSource,TSource,TSource>>) itself as a constructed generic method. 然後, 它會MethodCallExpression將傳遞Execute<TResult>(Expression)至由Provider source參數IQueryProvider的屬性所表示之的方法。It then passes the MethodCallExpression to the Execute<TResult>(Expression) method of the IQueryProvider represented by the Provider property of the source parameter.

因執行代表呼叫Aggregate<TSource>(IQueryable<TSource>, Expression<Func<TSource,TSource,TSource>>)之運算式樹狀架構而產生的查詢行為, 取決於source參數類型的實作為。The query behavior that occurs as a result of executing an expression tree that represents calling Aggregate<TSource>(IQueryable<TSource>, Expression<Func<TSource,TSource,TSource>>) depends on the implementation of the type of the source parameter. 預期的行為是將指定func的函式套用至來源序列中的每個值, 並傳回累積的值。The expected behavior is that the specified function, func, is applied to each value in the source sequence and the accumulated value is returned. source的第一個值會當做累積值的種子值使用, 這會對應至中func的第一個參數。The first value in source is used as the seed value for the accumulated value, which corresponds to the first parameter in func.

為了簡化常見的匯總作業, 標準查詢運算子的集合也包含兩個計數方法Count : LongCount和, 以及四個數值Min匯總Sum方法Max, 亦即、和AverageTo simplify common aggregation operations, the set of standard query operators also includes two counting methods, Count and LongCount, and four numeric aggregation methods, namely Max, Min, Sum, and Average.

適用於