# Enumerable.GroupByEnumerable.GroupByEnumerable.GroupByEnumerable.GroupBy Method

## 多載

 GroupBy(IEnumerable, Func, Func, Func,TResult>) GroupBy(IEnumerable, Func, Func, Func,TResult>) GroupBy(IEnumerable, Func, Func, Func,TResult>) GroupBy(IEnumerable, Func, Func, Func,TResult>) 依據指定的索引鍵選取器函式來群組序列的項目，並從每個群組及其索引鍵建立結果值。Groups the elements of a sequence according to a specified key selector function and creates a result value from each group and its key. 每個群組的項目都是利用指定的函式進行投影。The elements of each group are projected by using a specified function. GroupBy(IEnumerable, Func, Func, Func,TResult>, IEqualityComparer) GroupBy(IEnumerable, Func, Func, Func,TResult>, IEqualityComparer) GroupBy(IEnumerable, Func, Func, Func,TResult>, IEqualityComparer) GroupBy(IEnumerable, Func, Func, Func,TResult>, IEqualityComparer) 依據指定的索引鍵選取器函式來群組序列的項目，並從每個群組及其索引鍵建立結果值。Groups the elements of a sequence according to a specified key selector function and creates a result value from each group and its key. 索引鍵值是使用指定的比較子來進行比較，而每個群組的項目則都是利用指定的函式進行投影。Key values are compared by using a specified comparer, and the elements of each group are projected by using a specified function. GroupBy(IEnumerable, Func, Func) GroupBy(IEnumerable, Func, Func) GroupBy(IEnumerable, Func, Func) GroupBy(IEnumerable, Func, Func) 群組根據指定的索引鍵選取器函式，以及專案使用指定的函式的每個群組的項目序列的項目。Groups the elements of a sequence according to a specified key selector function and projects the elements for each group by using a specified function. GroupBy(IEnumerable, Func, Func, IEqualityComparer) GroupBy(IEnumerable, Func, Func, IEqualityComparer) GroupBy(IEnumerable, Func, Func, IEqualityComparer) GroupBy(IEnumerable, Func, Func, IEqualityComparer) 群組依據索引鍵選取器函式序列的項目。Groups the elements of a sequence according to a key selector function. 索引鍵是使用比較子來進行比較，而每個群組的項目都是利用指定的函式進行投影。The keys are compared by using a comparer and each group's elements are projected by using a specified function. GroupBy(IEnumerable, Func, Func,TResult>) GroupBy(IEnumerable, Func, Func,TResult>) GroupBy(IEnumerable, Func, Func,TResult>) GroupBy(IEnumerable, Func, Func,TResult>) 依據指定的索引鍵選取器函式來群組序列的項目，並從每個群組及其索引鍵建立結果值。Groups the elements of a sequence according to a specified key selector function and creates a result value from each group and its key. GroupBy(IEnumerable, Func, Func,TResult>, IEqualityComparer) GroupBy(IEnumerable, Func, Func,TResult>, IEqualityComparer) GroupBy(IEnumerable, Func, Func,TResult>, IEqualityComparer) GroupBy(IEnumerable, Func, Func,TResult>, IEqualityComparer) 依據指定的索引鍵選取器函式來群組序列的項目，並從每個群組及其索引鍵建立結果值。Groups the elements of a sequence according to a specified key selector function and creates a result value from each group and its key. 索引鍵是使用指定的比較子來進行比較。The keys are compared by using a specified comparer. GroupBy(IEnumerable, Func) GroupBy(IEnumerable, Func) GroupBy(IEnumerable, Func) GroupBy(IEnumerable, Func) 分組依據指定的索引鍵選取器函式序列的項目。Groups the elements of a sequence according to a specified key selector function. GroupBy(IEnumerable, Func, IEqualityComparer) GroupBy(IEnumerable, Func, IEqualityComparer) GroupBy(IEnumerable, Func, IEqualityComparer) GroupBy(IEnumerable, Func, IEqualityComparer) 群組的順序，根據指定的索引鍵選取器函式和比較使用指定的比較子索引鍵的項目。Groups the elements of a sequence according to a specified key selector function and compares the keys by using a specified comparer.

## GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>)GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>)GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>)GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>)

``````public:
generic <typename TSource, typename TKey, typename TElement, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, Func<TSource, TElement> ^ elementSelector, Func<TKey, System::Collections::Generic::IEnumerable<TElement> ^, TResult> ^ resultSelector);``````
``public static System.Collections.Generic.IEnumerable<TResult> GroupBy<TSource,TKey,TElement,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TSource,TElement> elementSelector, Func<TKey,System.Collections.Generic.IEnumerable<TElement>,TResult> resultSelector);``
``static member GroupBy : seq<'Source> * Func<'Source, 'Key> * Func<'Source, 'Element> * Func<'Key, seq<'Element>, 'Result> -> seq<'Result>``
``````<Extension()>
Public Function GroupBy(Of TSource, TKey, TElement, TResult) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), elementSelector As Func(Of TSource, TElement), resultSelector As Func(Of TKey, IEnumerable(Of TElement), TResult)) As IEnumerable(Of TResult)``````

#### 類型參數

TSource

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

TKey

TElement

TResult

#### 參數

source
IEnumerable<TSource>

IEnumerable<T>群組其項目。An IEnumerable<T> whose elements to group.

keySelector
Func<TSource,TKey>

elementSelector
Func<TSource,TElement>

resultSelector
Func<TKey,IEnumerable<TElement>,TResult>

#### 傳回

IEnumerable<TResult>

### 範例

``````class Pet
{
public string Name { get; set; }
public double Age { get; set; }
}

public static void GroupByEx4()
{
// Create a list of pets.
List<Pet> petsList =
new List<Pet>{ new Pet { Name="Barley", Age=8.3 },
new Pet { Name="Boots", Age=4.9 },
new Pet { Name="Whiskers", Age=1.5 },
new Pet { Name="Daisy", Age=4.3 } };

// Group Pet.Age values by the Math.Floor of the age.
// Then project an anonymous type from each group
// that consists of the key, the count of the group's
// elements, and the minimum and maximum age in the group.
var query = petsList.GroupBy(
pet => Math.Floor(pet.Age),
pet => pet.Age,
(baseAge, ages) => new
{
Key = baseAge,
Count = ages.Count(),
Min = ages.Min(),
Max = ages.Max()
});

// Iterate over each anonymous type.
foreach (var result in query)
{
Console.WriteLine("\nAge group: " + result.Key);
Console.WriteLine("Number of pets in this age group: " + result.Count);
Console.WriteLine("Minimum age: " + result.Min);
Console.WriteLine("Maximum age: " + result.Max);
}

/*  This code produces the following output:

Age group: 8
Number of pets in this age group: 1
Minimum age: 8.3
Maximum age: 8.3

Age group: 4
Number of pets in this age group: 2
Minimum age: 4.3
Maximum age: 4.9

Age group: 1
Number of pets in this age group: 1
Minimum age: 1.5
Maximum age: 1.5
*/
}
``````
``````Structure Pet
Public Name As String
Public Age As Double
End Structure

Public Sub GroupByEx4()
' Create a list of pets.
Dim petsList As New List(Of Pet)(New Pet() _
{New Pet With {.Name = "Barley", .Age = 8.3},
New Pet With {.Name = "Boots", .Age = 4.9},
New Pet With {.Name = "Whiskers", .Age = 1.5},
New Pet With {.Name = "Daisy", .Age = 4.3}})

' Group Pet.Age values by the Math.Floor of the age.
' Then project an anonymous type from each group
' that consists of the key, the count of the group's
' elements, and the minimum and maximum age in the group.
Dim query = petsList.GroupBy(
Function(pet) Math.Floor(pet.Age),
Function(pet) pet.Age,
Function(baseAge, ages) New With
{.Key = baseAge,
.Count = ages.Count(),
.Min = ages.Min(),
.Max = ages.Max()}
)

Dim output As New System.Text.StringBuilder
' Iterate over each anonymous type.
For Each result In query
output.AppendLine(vbCrLf & "Age group: " & result.Key)
output.AppendLine("Number of pets in this age group: " & result.Count)
output.AppendLine("Minimum age: " & result.Min)
output.AppendLine("Maximum age: " & result.Max)
Next

' Display the output.
MsgBox(output.ToString)
End Sub

' This code produces the following output:

' Age group: 8
' Number of pets in this age group: 1
' Minimum age: 8.3
' Maximum age: 8.3
'
' Age group: 4
' Number of pets in this age group: 2
' Minimum age: 4.3
' Maximum age: 4.9
'
' Age group: 1
' Number of pets in this age group: 1
' Minimum age: 1.5
' Maximum age: 1.5
``````

## GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>, IEqualityComparer<TKey>)GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>, IEqualityComparer<TKey>)GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>, IEqualityComparer<TKey>)GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>, IEqualityComparer<TKey>)

``````public:
generic <typename TSource, typename TKey, typename TElement, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, Func<TSource, TElement> ^ elementSelector, Func<TKey, System::Collections::Generic::IEnumerable<TElement> ^, TResult> ^ resultSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);``````
``public static System.Collections.Generic.IEnumerable<TResult> GroupBy<TSource,TKey,TElement,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TSource,TElement> elementSelector, Func<TKey,System.Collections.Generic.IEnumerable<TElement>,TResult> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);``
``static member GroupBy : seq<'Source> * Func<'Source, 'Key> * Func<'Source, 'Element> * Func<'Key, seq<'Element>, 'Result> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<'Result>``
``````<Extension()>
Public Function GroupBy(Of TSource, TKey, TElement, TResult) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), elementSelector As Func(Of TSource, TElement), resultSelector As Func(Of TKey, IEnumerable(Of TElement), TResult), comparer As IEqualityComparer(Of TKey)) As IEnumerable(Of TResult)``````

#### 類型參數

TSource

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

TKey

TElement

TResult

#### 參數

source
IEnumerable<TSource>

IEnumerable<T>群組其項目。An IEnumerable<T> whose elements to group.

keySelector
Func<TSource,TKey>

elementSelector
Func<TSource,TElement>

resultSelector
Func<TKey,IEnumerable<TElement>,TResult>

comparer
IEqualityComparer<TKey>

IEqualityComparer<T>來比較索引鍵。An IEqualityComparer<T> to compare keys with.

#### 傳回

IEnumerable<TResult>

## GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)

``````public:
generic <typename TSource, typename TKey, typename TElement>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<System::Linq::IGrouping<TKey, TElement> ^> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, Func<TSource, TElement> ^ elementSelector);``````
``public static System.Collections.Generic.IEnumerable<System.Linq.IGrouping<TKey,TElement>> GroupBy<TSource,TKey,TElement> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TSource,TElement> elementSelector);``
``static member GroupBy : seq<'Source> * Func<'Source, 'Key> * Func<'Source, 'Element> -> seq<System.Linq.IGrouping<'Key, 'Element>>``
``````<Extension()>
Public Function GroupBy(Of TSource, TKey, TElement) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), elementSelector As Func(Of TSource, TElement)) As IEnumerable(Of IGrouping(Of TKey, TElement))``````

#### 類型參數

TSource

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

TKey

TElement

IGrouping<TKey,TElement> 中的項目類型。The type of the elements in the IGrouping<TKey,TElement>.

#### 參數

source
IEnumerable<TSource>

IEnumerable<T>群組其項目。An IEnumerable<T> whose elements to group.

keySelector
Func<TSource,TKey>

elementSelector
Func<TSource,TElement>

#### 傳回

IEnumerable<IGrouping<TKey,TElement>>

C# 中的 `IEnumerable<IGrouping<TKey, TElement>>` 或 Visual Basic 中的 `IEnumerable(Of IGrouping(Of TKey, TElement))`，其中每個 IGrouping<TKey,TElement> 物件包含一個 `TElement` 類型的物件集合和一個索引鍵。An `IEnumerable<IGrouping<TKey, TElement>>` in C# or `IEnumerable(Of IGrouping(Of TKey, TElement))` in Visual Basic where each IGrouping<TKey,TElement> object contains a collection of objects of type `TElement` and a key.

#### 例外狀況

`source``keySelector``elementSelector``null``source` or `keySelector` or `elementSelector` is `null`.

### 範例

The following code example demonstrates how to use GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) to group the elements of a sequence.

``````class Pet
{
public string Name { get; set; }
public int Age { get; set; }
}

// Uses method-based query syntax.
public static void GroupByEx1()
{
// Create a list of pets.
List<Pet> pets =
new List<Pet>{ new Pet { Name="Barley", Age=8 },
new Pet { Name="Boots", Age=4 },
new Pet { Name="Whiskers", Age=1 },
new Pet { Name="Daisy", Age=4 } };

// Group the pets using Age as the key value
// and selecting only the pet's Name for each value.
IEnumerable<IGrouping<int, string>> query =
pets.GroupBy(pet => pet.Age, pet => pet.Name);

// Iterate over each IGrouping in the collection.
foreach (IGrouping<int, string> petGroup in query)
{
// Print the key value of the IGrouping.
Console.WriteLine(petGroup.Key);
// Iterate over each value in the
// IGrouping and print the value.
foreach (string name in petGroup)
Console.WriteLine("  {0}", name);
}
}

/*
This code produces the following output:

8
Barley
4
Boots
Daisy
1
Whiskers
*/
``````
``````Structure Pet
Public Name As String
Public Age As Integer
End Structure

Sub GroupByEx1()
'Create a list of Pet objects.
Dim pets As New List(Of Pet)(New Pet() _
{New Pet With {.Name = "Barley", .Age = 8},
New Pet With {.Name = "Boots", .Age = 4},
New Pet With {.Name = "Whiskers", .Age = 1},
New Pet With {.Name = "Daisy", .Age = 4}})

' Group the pets using Age as the key
' and selecting only the pet's Name for each value.
Dim query As IEnumerable(Of IGrouping(Of Integer, String)) =
pets.GroupBy(Function(pet) pet.Age,
Function(pet) pet.Name)

Dim output As New System.Text.StringBuilder
' Iterate over each IGrouping in the collection.
For Each petGroup As IGrouping(Of Integer, String) In query
' Print the key value of the IGrouping.
output.AppendLine(petGroup.Key)
' Iterate over each value in the IGrouping and print the value.
For Each name As String In petGroup
output.AppendLine("  " & name)
Next
Next

' Display the output.
MsgBox(output.ToString)
End Sub

' This code produces the following output:
'
' 8
'   Barley
' 4
'   Boots
'   Daisy
' 1
'   Whiskers
``````

``````IEnumerable<IGrouping<int, string>> query =
from pet in pets
group pet.Name by pet.Age;
``````
``````    Dim query =
From pet In pets
Group pet.Name By Age = pet.Age Into ageGroup = Group
``````

Visual C# 或 Visual Basic 的查詢運算式中的項目和索引鍵選取範圍的運算式中發生相反的順序中呼叫的引數位置從GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)方法。In a Visual C# or Visual Basic query expression, the element and key selection expressions occur in the reverse order from their argument positions in a call to the GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) method.

### 備註

The GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) method returns a collection of IGrouping<TKey,TElement> objects, one for each distinct key that was encountered. IGrouping<TKey,TElement>IEnumerable<T>也具有其項目相關聯的索引鍵。An IGrouping<TKey,TElement> is an IEnumerable<T> that also has a key associated with its elements.

IGrouping<TKey,TElement>物件產生根據順序中的項目順序`source`產生第一個索引鍵，每個IGrouping<TKey,TElement>The IGrouping<TKey,TElement> objects are yielded in an order based on the order of the elements in `source` that produced the first key of each IGrouping<TKey,TElement>. 在群組中的項目產生的順序產生它們的項目會出現在`source`Elements in a grouping are yielded in the order that the elements that produced them appear in `source`.

## GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)

``````public:
generic <typename TSource, typename TKey, typename TElement>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<System::Linq::IGrouping<TKey, TElement> ^> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, Func<TSource, TElement> ^ elementSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);``````
``public static System.Collections.Generic.IEnumerable<System.Linq.IGrouping<TKey,TElement>> GroupBy<TSource,TKey,TElement> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TSource,TElement> elementSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);``
``static member GroupBy : seq<'Source> * Func<'Source, 'Key> * Func<'Source, 'Element> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<System.Linq.IGrouping<'Key, 'Element>>``
``````<Extension()>
Public Function GroupBy(Of TSource, TKey, TElement) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), elementSelector As Func(Of TSource, TElement), comparer As IEqualityComparer(Of TKey)) As IEnumerable(Of IGrouping(Of TKey, TElement))``````

#### 類型參數

TSource

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

TKey

TElement

IGrouping<TKey,TElement> 中的項目類型。The type of the elements in the IGrouping<TKey,TElement>.

#### 參數

source
IEnumerable<TSource>

IEnumerable<T>群組其項目。An IEnumerable<T> whose elements to group.

keySelector
Func<TSource,TKey>

elementSelector
Func<TSource,TElement>

comparer
IEqualityComparer<TKey>

#### 傳回

IEnumerable<IGrouping<TKey,TElement>>

C# 中的 `IEnumerable<IGrouping<TKey, TElement>>` 或 Visual Basic 中的 `IEnumerable(Of IGrouping(Of TKey, TElement))`，其中每個 IGrouping<TKey,TElement> 物件包含一個 `TElement` 類型的物件集合和一個索引鍵。An `IEnumerable<IGrouping<TKey, TElement>>` in C# or `IEnumerable(Of IGrouping(Of TKey, TElement))` in Visual Basic where each IGrouping<TKey,TElement> object contains a collection of objects of type `TElement` and a key.

#### 例外狀況

`source``keySelector``elementSelector``null``source` or `keySelector` or `elementSelector` is `null`.

### 備註

The GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>) method returns a collection of IGrouping<TKey,TElement> objects, one for each distinct key that was encountered. IGrouping<TKey,TElement>IEnumerable<T>也具有其項目相關聯的索引鍵。An IGrouping<TKey,TElement> is an IEnumerable<T> that also has a key associated with its elements.

IGrouping<TKey,TElement>物件產生根據順序中的項目順序`source`產生第一個索引鍵，每個IGrouping<TKey,TElement>The IGrouping<TKey,TElement> objects are yielded in an order based on the order of the elements in `source` that produced the first key of each IGrouping<TKey,TElement>. 在群組中的項目產生的順序產生它們的項目會出現在`source`Elements in a grouping are yielded in the order that the elements that produced them appear in `source`.

## GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)

``````public:
generic <typename TSource, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, Func<TKey, System::Collections::Generic::IEnumerable<TSource> ^, TResult> ^ resultSelector);``````
``public static System.Collections.Generic.IEnumerable<TResult> GroupBy<TSource,TKey,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TKey,System.Collections.Generic.IEnumerable<TSource>,TResult> resultSelector);``
``static member GroupBy : seq<'Source> * Func<'Source, 'Key> * Func<'Key, seq<'Source>, 'Result> -> seq<'Result>``
``````<Extension()>
Public Function GroupBy(Of TSource, TKey, TResult) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), resultSelector As Func(Of TKey, IEnumerable(Of TSource), TResult)) As IEnumerable(Of TResult)``````

#### 類型參數

TSource

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

TKey

TResult

#### 參數

source
IEnumerable<TSource>

IEnumerable<T>群組其項目。An IEnumerable<T> whose elements to group.

keySelector
Func<TSource,TKey>

resultSelector
Func<TKey,IEnumerable<TSource>,TResult>

#### 傳回

IEnumerable<TResult>

### 範例

``````class Pet
{
public string Name { get; set; }
public double Age { get; set; }
}

public static void GroupByEx3()
{
// Create a list of pets.
List<Pet> petsList =
new List<Pet>{ new Pet { Name="Barley", Age=8.3 },
new Pet { Name="Boots", Age=4.9 },
new Pet { Name="Whiskers", Age=1.5 },
new Pet { Name="Daisy", Age=4.3 } };

// Group Pet objects by the Math.Floor of their age.
// Then project an anonymous type from each group
// that consists of the key, the count of the group's
// elements, and the minimum and maximum age in the group.
var query = petsList.GroupBy(
pet => Math.Floor(pet.Age),
(age, pets) => new
{
Key = age,
Count = pets.Count(),
Min = pets.Min(pet => pet.Age),
Max = pets.Max(pet => pet.Age)
});

// Iterate over each anonymous type.
foreach (var result in query)
{
Console.WriteLine("\nAge group: " + result.Key);
Console.WriteLine("Number of pets in this age group: " + result.Count);
Console.WriteLine("Minimum age: " + result.Min);
Console.WriteLine("Maximum age: " + result.Max);
}

/*  This code produces the following output:

Age group: 8
Number of pets in this age group: 1
Minimum age: 8.3
Maximum age: 8.3

Age group: 4
Number of pets in this age group: 2
Minimum age: 4.3
Maximum age: 4.9

Age group: 1
Number of pets in this age group: 1
Minimum age: 1.5
Maximum age: 1.5
*/
}
``````
``````Structure Pet
Public Name As String
Public Age As Double
End Structure

Public Sub GroupByEx3()
' Create a list of pets.
Dim petsList As New List(Of Pet)(New Pet() _
{New Pet With {.Name = "Barley", .Age = 8.3},
New Pet With {.Name = "Boots", .Age = 4.9},
New Pet With {.Name = "Whiskers", .Age = 1.5},
New Pet With {.Name = "Daisy", .Age = 4.3}})

' Group Pet objects by the Math.Floor of their age.
' Then project an anonymous type from each group
' that consists of the key, the count of the group's
' elements, and the minimum and maximum age in the group.
Dim query = petsList.GroupBy(
Function(pet) Math.Floor(pet.Age),
Function(age, pets) New With
{.Key = age,
.Count = pets.Count(),
.Min = pets.Min(Function(pet) pet.Age),
.Max = pets.Max(Function(Pet) Pet.Age)}
)

Dim output As New System.Text.StringBuilder
' Iterate over each anonymous type.
For Each result In query
output.AppendLine(vbCrLf & "Age group: " & result.Key)
output.AppendLine("Number of pets in this age group: " & result.Count)
output.AppendLine("Minimum age: " & result.Min)
output.AppendLine("Maximum age: " & result.Max)
Next

' Display the output.
MsgBox(output.ToString)
End Sub

' This code produces the following output:

' Age group: 8
' Number of pets in this age group: 1
' Minimum age: 8.3
' Maximum age: 8.3
'
' Age group: 4
' Number of pets in this age group: 2
' Minimum age: 4.3
' Maximum age: 4.9
'
' Age group: 1
' Number of pets in this age group: 1
' Minimum age: 1.5
' Maximum age: 1.5
``````

## GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>, IEqualityComparer<TKey>)GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>, IEqualityComparer<TKey>)GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>, IEqualityComparer<TKey>)GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>, IEqualityComparer<TKey>)

``````public:
generic <typename TSource, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, Func<TKey, System::Collections::Generic::IEnumerable<TSource> ^, TResult> ^ resultSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);``````
``public static System.Collections.Generic.IEnumerable<TResult> GroupBy<TSource,TKey,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TKey,System.Collections.Generic.IEnumerable<TSource>,TResult> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);``
``static member GroupBy : seq<'Source> * Func<'Source, 'Key> * Func<'Key, seq<'Source>, 'Result> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<'Result>``
``````<Extension()>
Public Function GroupBy(Of TSource, TKey, TResult) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), resultSelector As Func(Of TKey, IEnumerable(Of TSource), TResult), comparer As IEqualityComparer(Of TKey)) As IEnumerable(Of TResult)``````

#### 類型參數

TSource

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

TKey

TResult

#### 參數

source
IEnumerable<TSource>

IEnumerable<T>群組其項目。An IEnumerable<T> whose elements to group.

keySelector
Func<TSource,TKey>

resultSelector
Func<TKey,IEnumerable<TSource>,TResult>

comparer
IEqualityComparer<TKey>

IEqualityComparer<T>來比較索引鍵。An IEqualityComparer<T> to compare keys with.

#### 傳回

IEnumerable<TResult>

## GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

``````public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<System::Linq::IGrouping<TKey, TSource> ^> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector);``````
``public static System.Collections.Generic.IEnumerable<System.Linq.IGrouping<TKey,TSource>> GroupBy<TSource,TKey> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector);``
``static member GroupBy : seq<'Source> * Func<'Source, 'Key> -> seq<System.Linq.IGrouping<'Key, 'Source>>``
``````<Extension()>
Public Function GroupBy(Of TSource, TKey) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey)) As IEnumerable(Of IGrouping(Of TKey, TSource))``````

#### 類型參數

TSource

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

TKey

#### 參數

source
IEnumerable<TSource>

IEnumerable<T>群組其項目。An IEnumerable<T> whose elements to group.

keySelector
Func<TSource,TKey>

#### 傳回

IEnumerable<IGrouping<TKey,TSource>>

C# 中的 `IEnumerable<IGrouping<TKey, TSource>>` 或 Visual Basic 中的 `IEnumerable(Of IGrouping(Of TKey, TSource))`，其中每個 IGrouping<TKey,TElement> 物件包含一序列的物件序和一個索引鍵。An `IEnumerable<IGrouping<TKey, TSource>>` in C# or `IEnumerable(Of IGrouping(Of TKey, TSource))` in Visual Basic where each IGrouping<TKey,TElement> object contains a sequence of objects and a key.

#### 例外狀況

`source``keySelector``null``source` or `keySelector` is `null`.

### 備註

GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)方法傳回的集合IGrouping<TKey,TElement>物件，一個用於每個發現的相異索引鍵。The GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) method returns a collection of IGrouping<TKey,TElement> objects, one for each distinct key that was encountered. IGrouping<TKey,TElement>IEnumerable<T>也具有其項目相關聯的索引鍵。An IGrouping<TKey,TElement> is an IEnumerable<T> that also has a key associated with its elements.

IGrouping<TKey,TElement>物件產生根據順序中的項目順序`source`產生第一個索引鍵，每個IGrouping<TKey,TElement>The IGrouping<TKey,TElement> objects are yielded in an order based on the order of the elements in `source` that produced the first key of each IGrouping<TKey,TElement>. 在群組中的項目中出現的順序產生`source`Elements in a grouping are yielded in the order they appear in `source`.

## GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

``````public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<System::Linq::IGrouping<TKey, TSource> ^> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);``````
``public static System.Collections.Generic.IEnumerable<System.Linq.IGrouping<TKey,TSource>> GroupBy<TSource,TKey> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);``
``static member GroupBy : seq<'Source> * Func<'Source, 'Key> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<System.Linq.IGrouping<'Key, 'Source>>``
``````<Extension()>
Public Function GroupBy(Of TSource, TKey) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), comparer As IEqualityComparer(Of TKey)) As IEnumerable(Of IGrouping(Of TKey, TSource))``````

#### 類型參數

TSource

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

TKey

#### 參數

source
IEnumerable<TSource>

IEnumerable<T>群組其項目。An IEnumerable<T> whose elements to group.

keySelector
Func<TSource,TKey>

comparer
IEqualityComparer<TKey>

#### 傳回

IEnumerable<IGrouping<TKey,TSource>>

C# 中的 `IEnumerable<IGrouping<TKey, TSource>>` 或 Visual Basic 中的 `IEnumerable(Of IGrouping(Of TKey, TSource))`，其中每個 IGrouping<TKey,TElement> 物件包含一個物件集合和一個索引鍵。An `IEnumerable<IGrouping<TKey, TSource>>` in C# or `IEnumerable(Of IGrouping(Of TKey, TSource))` in Visual Basic where each IGrouping<TKey,TElement> object contains a collection of objects and a key.

#### 例外狀況

`source``keySelector``null``source` or `keySelector` is `null`.

### 備註

The GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) method returns a collection of IGrouping<TKey,TElement> objects, one for each distinct key that was encountered. IGrouping<TKey,TElement>IEnumerable<T>也具有其項目相關聯的索引鍵。An IGrouping<TKey,TElement> is an IEnumerable<T> that also has a key associated with its elements.

IGrouping<TKey,TElement>物件產生根據順序中的項目順序`source`產生第一個索引鍵，每個IGrouping<TKey,TElement>The IGrouping<TKey,TElement> objects are yielded in an order based on the order of the elements in `source` that produced the first key of each IGrouping<TKey,TElement>. 在群組中的項目中出現的順序產生`source`Elements in a grouping are yielded in the order they appear in `source`.