.NET Framework Class Library
EnumerableGroupByTSource, TKey Method (IEnumerableTSource, FuncTSource, TKey, IEqualityComparerTKey)

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

Namespace:   System.Linq
Assemblies:   System.Linq (in System.Linq.dll)
  System.Core (in System.Core.dll)
<[%$TOPIC/bb534334_en-us_VS_110_1_0_0_0_0%]> _
Public Shared Function GroupBy(Of TSource, TKey) ( _
	source As [%$TOPIC/bb534334_en-us_VS_110_1_0_0_0_1%](Of TSource), _
	keySelector As [%$TOPIC/bb534334_en-us_VS_110_1_0_0_0_2%](Of TSource, TKey), _
	comparer As [%$TOPIC/bb534334_en-us_VS_110_1_0_0_0_3%](Of TKey) _
) As [%$TOPIC/bb534334_en-us_VS_110_1_0_0_0_4%](Of [%$TOPIC/bb534334_en-us_VS_110_1_0_0_0_5%](Of TKey, TSource))
public static [%$TOPIC/bb534334_en-us_VS_110_1_0_1_0_0%]<[%$TOPIC/bb534334_en-us_VS_110_1_0_1_0_1%]<TKey, TSource>> GroupBy<TSource, TKey>(
	this [%$TOPIC/bb534334_en-us_VS_110_1_0_1_0_2%]<TSource> source,
	[%$TOPIC/bb534334_en-us_VS_110_1_0_1_0_3%]<TSource, TKey> keySelector,
	[%$TOPIC/bb534334_en-us_VS_110_1_0_1_0_4%]<TKey> comparer
generic<typename TSource, typename TKey>
static [%$TOPIC/bb534334_en-us_VS_110_1_0_2_0_1%]<[%$TOPIC/bb534334_en-us_VS_110_1_0_2_0_2%]<TKey, TSource>^>^ GroupBy(
	[%$TOPIC/bb534334_en-us_VS_110_1_0_2_0_3%]<TSource>^ source, 
	[%$TOPIC/bb534334_en-us_VS_110_1_0_2_0_4%]<TSource, TKey>^ keySelector, 
	[%$TOPIC/bb534334_en-us_VS_110_1_0_2_0_5%]<TKey>^ comparer
static member GroupBy : 
        source:[%$TOPIC/bb534334_en-us_VS_110_1_0_3_0_0%]<'TSource> * 
        keySelector:[%$TOPIC/bb534334_en-us_VS_110_1_0_3_0_1%]<'TSource, 'TKey> * 
        comparer:[%$TOPIC/bb534334_en-us_VS_110_1_0_3_0_2%]<'TKey> -> [%$TOPIC/bb534334_en-us_VS_110_1_0_3_0_3%]<[%$TOPIC/bb534334_en-us_VS_110_1_0_3_0_4%]<'TKey, 'TSource>> 
JScript does not support generic types or methods.

Type Parameters


The type of the elements of source.


The type of the key returned by keySelector.


Type: System.Collections.GenericIEnumerableTSource

An IEnumerableT whose elements to group.

Type: SystemFuncTSource, TKey

A function to extract the key for each element.

Type: System.Collections.GenericIEqualityComparerTKey

An IEqualityComparerT to compare keys.

Return Value

Type: System.Collections.GenericIEnumerable IGroupingTKey, TSource
An IEnumerable<IGrouping<TKey, TSource>> in C# or IEnumerable(Of IGrouping(Of TKey, TSource)) in Visual Basic where each IGroupingTKey, TElement object contains a collection of objects and a key.

Usage Note

In Visual Basic and C#, you can call this method as an instance method on any object of type IEnumerableTSource. When you use instance method syntax to call this method, omit the first parameter. For more information, see Extension Methods (Visual Basic) or Extension Methods (C# Programming Guide).

source or keySelector is .


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 its GetEnumerator method directly or by using foreach in Visual C# or For Each in Visual Basic.

The GroupByTSource, TKey(IEnumerableTSource, FuncTSource, TKey, IEqualityComparerTKey) method returns a collection of IGroupingTKey, TElement objects, one for each distinct key that was encountered. An IGroupingTKey, TElement is an IEnumerableT that also has a key associated with its elements.

The IGroupingTKey, TElement objects are yielded in an order based on the order of the elements in source that produced the first key of each IGroupingTKey, TElement. Elements in a grouping are yielded in the order they appear in source.

If comparer is , the default equality comparer Default is used to compare keys.

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

In query expression syntax, a group by (Visual C#) or Group By Into (Visual Basic) clause translates to an invocation of GroupBy. For more information and usage examples, see group clause (C# Reference) and Group By Clause (Visual Basic).

Version Information

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

XNA Framework

Supported in: 3.0

Portable Class Library

Supported in: Portable Class Library

Supported in: Windows Phone 8.1

Supported in: Windows Phone Silverlight 8.1

Supported in: Windows Phone Silverlight 8