Movatterモバイル変換


[0]ホーム

URL:


Skip to main contentSkip to in-page navigation

This browser is no longer supported.

Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.

Download Microsoft EdgeMore info about Internet Explorer and Microsoft Edge
Table of contentsExit focus mode

Enumerable.GroupBy Method

Definition

Namespace:
System.Linq
Assemblies:
System.Core.dll, System.Linq.dll
Assemblies:
netstandard.dll, System.Linq.dll
Assembly:
System.Linq.dll
Assembly:
System.Core.dll
Assembly:
netstandard.dll

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Groups the elements of a sequence.

Overloads

GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,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<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>, IEqualityComparer<TKey>)

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<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)

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<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)

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<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,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<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>, IEqualityComparer<TKey>)

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<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Groups the elements of a sequence according to a specified key selector function.

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

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

Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs

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.

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)

Type Parameters

TSource

The type of the elements ofsource.

TKey

The type of the key returned bykeySelector.

TElement

The type of the elements in eachIGrouping<TKey,TElement>.

TResult

The type of the result value returned byresultSelector.

Parameters

source
IEnumerable<TSource>

AnIEnumerable<T> whose elements to group.

keySelector
Func<TSource,TKey>

A function to extract the key for each element.

elementSelector
Func<TSource,TElement>

A function to map each source element to an element in anIGrouping<TKey,TElement>.

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

A function to create a result value from each group.

Returns

IEnumerable<TResult>

A collection of elements of typeTResult where each element represents a projection over a group and its key.

Exceptions

source orkeySelector orelementSelector orresultSelector isnull.

Examples

The following code example demonstrates how to useGroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>) to group the projected elements of a sequence and then project a sequence of results of typeTResult.

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 DoubleEnd StructurePublic 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.    Console.WriteLine(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

Remarks

In query expression syntax, agroup by (C#) orGroup By Into (Visual Basic) clause translates to an invocation ofGroupBy.

See also

Applies to

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

Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs

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.

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);
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)

Type Parameters

TSource

The type of the elements ofsource.

TKey

The type of the key returned bykeySelector.

TElement

The type of the elements in eachIGrouping<TKey,TElement>.

TResult

The type of the result value returned byresultSelector.

Parameters

source
IEnumerable<TSource>

AnIEnumerable<T> whose elements to group.

keySelector
Func<TSource,TKey>

A function to extract the key for each element.

elementSelector
Func<TSource,TElement>

A function to map each source element to an element in anIGrouping<TKey,TElement>.

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

A function to create a result value from each group.

comparer
IEqualityComparer<TKey>

AnIEqualityComparer<T> to compare keys with.

Returns

IEnumerable<TResult>

A collection of elements of typeTResult where each element represents a projection over a group and its key.

Exceptions

source orkeySelector orelementSelector orresultSelector isnull.

See also

Applies to

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

Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs

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.

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

Type Parameters

TSource

The type of the elements ofsource.

TKey

The type of the key returned bykeySelector.

TElement

The type of the elements in theIGrouping<TKey,TElement>.

Parameters

source
IEnumerable<TSource>

AnIEnumerable<T> whose elements to group.

keySelector
Func<TSource,TKey>

A function to extract the key for each element.

elementSelector
Func<TSource,TElement>

A function to map each source element to an element in theIGrouping<TKey,TElement>.

Returns

IEnumerable<IGrouping<TKey,TElement>>

AnIEnumerable<IGrouping<TKey, TElement>> in C# orIEnumerable(Of IGrouping(Of TKey, TElement)) in Visual Basic where eachIGrouping<TKey,TElement> object contains a collection of objects of typeTElement and a key.

Exceptions

source orkeySelector orelementSelector isnull.

Examples

The following code example demonstrates how to useGroupBy<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 IntegerEnd StructureSub 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.    Console.WriteLine(output.ToString)End Sub' This code produces the following output:'' 8'   Barley' 4'   Boots'   Daisy' 1'   Whiskers

In query expression syntax, agroup by (C#) orGroup By Into (Visual Basic) clause translates to an invocation ofGroupBy. The translation of the query expression in the following example is equivalent to the query in the example above.

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

Note

In a 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 theGroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) method.

Remarks

This method is implemented by using deferred execution. The immediate return value is an object that stores all the information that is required to perform the action. The query represented by this method is not executed until the object is enumerated either by calling itsGetEnumerator method directly or by usingforeach in C# orFor Each in Visual Basic.

TheGroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) method returns a collection ofIGrouping<TKey,TElement> objects, one for each distinct key that was encountered. AnIGrouping<TKey,TElement> is anIEnumerable<T> that also has a key associated with its elements.

TheIGrouping<TKey,TElement> objects are yielded in an order based on the order of the elements insource that produced the first key of eachIGrouping<TKey,TElement>. Elements in a grouping are yielded in the order that the elements that produced them appear insource.

The default equality comparerDefault is used to compare keys.

See also

Applies to

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

Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs

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.

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);
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))

Type Parameters

TSource

The type of the elements ofsource.

TKey

The type of the key returned bykeySelector.

TElement

The type of the elements in theIGrouping<TKey,TElement>.

Parameters

source
IEnumerable<TSource>

AnIEnumerable<T> whose elements to group.

keySelector
Func<TSource,TKey>

A function to extract the key for each element.

elementSelector
Func<TSource,TElement>

A function to map each source element to an element in anIGrouping<TKey,TElement>.

comparer
IEqualityComparer<TKey>

AnIEqualityComparer<T> to compare keys.

Returns

IEnumerable<IGrouping<TKey,TElement>>

AnIEnumerable<IGrouping<TKey, TElement>> in C# orIEnumerable(Of IGrouping(Of TKey, TElement)) in Visual Basic where eachIGrouping<TKey,TElement> object contains a collection of objects of typeTElement and a key.

Exceptions

source orkeySelector orelementSelector isnull.

Remarks

This method is implemented by using deferred execution. The immediate return value is an object that stores all the information that is required to perform the action. The query represented by this method is not executed until the object is enumerated either by calling itsGetEnumerator method directly or by usingforeach in C# orFor Each in Visual Basic.

TheGroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>) method returns a collection ofIGrouping<TKey,TElement> objects, one for each distinct key that was encountered. AnIGrouping<TKey,TElement> is anIEnumerable<T> that also has a key associated with its elements.

TheIGrouping<TKey,TElement> objects are yielded in an order based on the order of the elements insource that produced the first key of eachIGrouping<TKey,TElement>. Elements in a grouping are yielded in the order that the elements that produced them appear insource.

Ifcomparer isnull, the default equality comparerDefault is used to compare keys.

If two keys are considered equal according tocomparer, the first key is chosen as the key for that grouping.

In query expression syntax, agroup by (C#) orGroup By Into (Visual Basic) clause translates to an invocation ofGroupBy. For more information and usage examples, seegroup clause andGroup By Clause.

See also

Applies to

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

Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs

Groups the elements of a sequence according to a specified key selector function and creates a result value from each group and its key.

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)

Type Parameters

TSource

The type of the elements ofsource.

TKey

The type of the key returned bykeySelector.

TResult

The type of the result value returned byresultSelector.

Parameters

source
IEnumerable<TSource>

AnIEnumerable<T> whose elements to group.

keySelector
Func<TSource,TKey>

A function to extract the key for each element.

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

A function to create a result value from each group.

Returns

IEnumerable<TResult>

A collection of elements of typeTResult where each element represents a projection over a group and its key.

Exceptions

source orkeySelector orresultSelector isnull.

Examples

The following code example demonstrates how to useGroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>) to group the elements of a sequence and project a sequence of results of typeTResult.

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 DoubleEnd StructurePublic 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.    Console.WriteLine(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

Remarks

In query expression syntax, agroup by (C#) orGroup By Into (Visual Basic) clause translates to an invocation ofGroupBy.

See also

Applies to

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

Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs

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.

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);
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)

Type Parameters

TSource

The type of the elements ofsource.

TKey

The type of the key returned bykeySelector.

TResult

The type of the result value returned byresultSelector.

Parameters

source
IEnumerable<TSource>

AnIEnumerable<T> whose elements to group.

keySelector
Func<TSource,TKey>

A function to extract the key for each element.

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

A function to create a result value from each group.

comparer
IEqualityComparer<TKey>

AnIEqualityComparer<T> to compare keys with.

Returns

IEnumerable<TResult>

A collection of elements of typeTResult where each element represents a projection over a group and its key.

Exceptions

source orkeySelector orresultSelector isnull.

See also

Applies to

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

Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs

Groups the elements of a sequence according to a specified key selector function.

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

Type Parameters

TSource

The type of the elements ofsource.

TKey

The type of the key returned bykeySelector.

Parameters

source
IEnumerable<TSource>

AnIEnumerable<T> whose elements to group.

keySelector
Func<TSource,TKey>

A function to extract the key for each element.

Returns

IEnumerable<IGrouping<TKey,TSource>>

AnIEnumerable<IGrouping<TKey, TSource>> in C# orIEnumerable(Of IGrouping(Of TKey, TSource)) in Visual Basic where eachIGrouping<TKey,TElement> object contains a sequence of objects and a key.

Exceptions

source orkeySelector isnull.

Remarks

This method is implemented by using deferred execution. The immediate return value is an object that stores all the information that is required to perform the action. The query represented by this method is not executed until the object is enumerated either by calling itsGetEnumerator method directly or by usingforeach in C# orFor Each in Visual Basic.

TheGroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) method returns a collection ofIGrouping<TKey,TElement> objects, one for each distinct key that was encountered. AnIGrouping<TKey,TElement> is anIEnumerable<T> that also has a key associated with its elements.

TheIGrouping<TKey,TElement> objects are yielded in an order based on the order of the elements insource that produced the first key of eachIGrouping<TKey,TElement>. Elements in a grouping are yielded in the order they appear insource.

The default equality comparerDefault is used to compare keys.

In query expression syntax, agroup by (C#) orGroup By Into (Visual Basic) clause translates to an invocation ofGroupBy. For more information and usage examples, seegroup clause andGroup By Clause.

See also

Applies to

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

Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs

Groups the elements of a sequence according to a specified key selector function and compares the keys by using a specified comparer.

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);
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))

Type Parameters

TSource

The type of the elements ofsource.

TKey

The type of the key returned bykeySelector.

Parameters

source
IEnumerable<TSource>

AnIEnumerable<T> whose elements to group.

keySelector
Func<TSource,TKey>

A function to extract the key for each element.

comparer
IEqualityComparer<TKey>

AnIEqualityComparer<T> to compare keys.

Returns

IEnumerable<IGrouping<TKey,TSource>>

AnIEnumerable<IGrouping<TKey, TSource>> in C# orIEnumerable(Of IGrouping(Of TKey, TSource)) in Visual Basic where eachIGrouping<TKey,TElement> object contains a collection of objects and a key.

Exceptions

source orkeySelector isnull.

Remarks

This method is implemented by using deferred execution. The immediate return value is an object that stores all the information that is required to perform the action. The query represented by this method is not executed until the object is enumerated either by calling itsGetEnumerator method directly or by usingforeach in C# orFor Each in Visual Basic.

TheGroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) method returns a collection ofIGrouping<TKey,TElement> objects, one for each distinct key that was encountered. AnIGrouping<TKey,TElement> is anIEnumerable<T> that also has a key associated with its elements.

TheIGrouping<TKey,TElement> objects are yielded in an order based on the order of the elements insource that produced the first key of eachIGrouping<TKey,TElement>. Elements in a grouping are yielded in the order they appear insource.

Ifcomparer isnull, the default equality comparerDefault is used to compare keys.

If two keys are considered equal according tocomparer, the first key is chosen as the key for that grouping.

In query expression syntax, agroup by (C#) orGroup By Into (Visual Basic) clause translates to an invocation ofGroupBy. For more information and usage examples, seegroup clause andGroup By Clause.

See also

Applies to

Collaborate with us on GitHub
The source for this content can be found on GitHub, where you can also create and review issues and pull requests. For more information, seeour contributor guide.

Feedback

Was this page helpful?

YesNo

In this article

Was this page helpful?

YesNo