# 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

`keySelector` 所傳回之索引鍵的型別。The type of the key returned by `keySelector`.

TElement

TResult

`resultSelector` 所傳回之結果值的型別。The type of the result value returned by `resultSelector`.

#### 參數

source
IEnumerable<TSource>

keySelector
Func<TSource,TKey>

elementSelector
Func<TSource,TElement>

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

#### 傳回

IEnumerable<TResult>

`TResult` 型別項目的集合，其中每個項目都代表群組及其索引鍵的投影。A collection of elements of type `TResult` where each element represents a projection over a group and its key.

### 範例

``````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

`keySelector` 所傳回之索引鍵的型別。The type of the key returned by `keySelector`.

TElement

TResult

`resultSelector` 所傳回之結果值的型別。The type of the result value returned by `resultSelector`.

#### 參數

source
IEnumerable<TSource>

keySelector
Func<TSource,TKey>

elementSelector
Func<TSource,TElement>

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

comparer
IEqualityComparer<TKey>

#### 傳回

IEnumerable<TResult>

`TResult` 型別項目的集合，其中每個項目都代表群組及其索引鍵的投影。A collection of elements of type `TResult` where each element represents a projection over a group and its key.

## 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

`keySelector` 所傳回之索引鍵的型別。The type of the key returned by `keySelector`.

TElement

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

#### 參數

source
IEnumerable<TSource>

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
``````

### 備註

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.

## 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

`keySelector` 所傳回之索引鍵的型別。The type of the key returned by `keySelector`.

TElement

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

#### 參數

source
IEnumerable<TSource>

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.

## 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

`keySelector` 所傳回之索引鍵的型別。The type of the key returned by `keySelector`.

TResult

`resultSelector` 所傳回之結果值的型別。The type of the result value returned by `resultSelector`.

#### 參數

source
IEnumerable<TSource>

keySelector
Func<TSource,TKey>

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

#### 傳回

IEnumerable<TResult>

`TResult` 型別項目的集合，其中每個項目都代表群組及其索引鍵的投影。A collection of elements of type `TResult` where each element represents a projection over a group and its key.

### 範例

``````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

`keySelector` 所傳回之索引鍵的型別。The type of the key returned by `keySelector`.

TResult

`resultSelector` 所傳回之結果值的型別。The type of the result value returned by `resultSelector`.

#### 參數

source
IEnumerable<TSource>

keySelector
Func<TSource,TKey>

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

comparer
IEqualityComparer<TKey>

#### 傳回

IEnumerable<TResult>

`TResult` 型別項目的集合，其中每個項目都代表群組及其索引鍵的投影。A collection of elements of type `TResult` where each element represents a projection over a group and its key.

## 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

`keySelector` 所傳回之索引鍵的型別。The type of the key returned by `keySelector`.

#### 參數

source
IEnumerable<TSource>

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>, 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

`keySelector` 所傳回之索引鍵的型別。The type of the key returned by `keySelector`.

#### 參數

source
IEnumerable<TSource>

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.