Enumerable.GroupBy Méthode

Définition

Regroupe les éléments d’une séquence.

Surcharges

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

Regroupe les éléments d’une séquence en fonction d’une fonction de sélecteur de clé spécifiée et crée une valeur de résultat à partir de chaque groupe et de sa clé. Les éléments de chaque groupe sont projetés à l’aide d’une fonction spécifiée.

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

Regroupe les éléments d’une séquence en fonction d’une fonction de sélecteur de clé spécifiée et crée une valeur de résultat à partir de chaque groupe et de sa clé. Les valeurs de clé sont comparées à l’aide d’un comparateur spécifié et les éléments de chaque groupe sont projetés à l’aide d’une fonction spécifiée.

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

Regroupe les éléments d’une séquence en fonction d’une fonction de sélecteur de clé spécifiée et projette les éléments pour chaque groupe à l’aide d’une fonction spécifiée.

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

Regroupe les éléments d’une séquence en fonction d’une fonction de sélecteur de clé. Les clés sont comparées à l’aide d’un comparateur et les éléments de chaque groupe sont projetés à l’aide d’une fonction spécifiée.

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

Regroupe les éléments d’une séquence en fonction d’une fonction de sélecteur de clé spécifiée et crée une valeur de résultat à partir de chaque groupe et de sa clé.

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

Regroupe les éléments d’une séquence en fonction d’une fonction de sélecteur de clé spécifiée et crée une valeur de résultat à partir de chaque groupe et de sa clé. Les clés sont comparées à l’aide d’un comparateur spécifié.

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

Regroupe les éléments d’une séquence en fonction d’une fonction de sélecteur de clé spécifiée.

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

Regroupe les éléments d’une séquence en fonction d’une fonction de sélecteur de clé spécifiée et compare les clés à l’aide d’un comparateur spécifié.

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

Regroupe les éléments d’une séquence en fonction d’une fonction de sélecteur de clé spécifiée et crée une valeur de résultat à partir de chaque groupe et de sa clé. Les éléments de chaque groupe sont projetés à l’aide d’une fonction spécifiée.

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)

Paramètres de type

TSource

Type des éléments de source.

TKey

Type de la clé retournée par keySelector.

TElement

Type des éléments dans chaque IGrouping<TKey,TElement>.

TResult

Type de la valeur de résultat retournée par resultSelector.

Paramètres

source
IEnumerable<TSource>

Dont IEnumerable<T> les éléments à regrouper.

keySelector
Func<TSource,TKey>

Fonction permettant d’extraire la clé de chaque élément.

elementSelector
Func<TSource,TElement>

Fonction permettant de mapper chaque élément source à un élément d’un IGrouping<TKey,TElement>.

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

Fonction permettant de créer une valeur de résultat à partir de chaque groupe.

Retours

IEnumerable<TResult>

Collection d’éléments de type TResult où chaque élément représente une projection sur un groupe et sa clé.

Exceptions

source ou keySelector ou elementSelectorresultSelector est null.

Exemples

L’exemple de code suivant montre comment regrouper GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>) les éléments projetés d’une séquence, puis projeter une séquence de résultats de type 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.
    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

Remarques

Dans la syntaxe d’expression de requête, une clause group by (C#) ou Group By Into (Visual Basic) se traduit par un appel de GroupBy.

Voir aussi

S’applique à

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

Regroupe les éléments d’une séquence en fonction d’une fonction de sélecteur de clé spécifiée et crée une valeur de résultat à partir de chaque groupe et de sa clé. Les valeurs de clé sont comparées à l’aide d’un comparateur spécifié et les éléments de chaque groupe sont projetés à l’aide d’une fonction spécifiée.

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)

Paramètres de type

TSource

Type des éléments de source.

TKey

Type de la clé retournée par keySelector.

TElement

Type des éléments dans chaque IGrouping<TKey,TElement>.

TResult

Type de la valeur de résultat retournée par resultSelector.

Paramètres

source
IEnumerable<TSource>

Dont IEnumerable<T> les éléments à regrouper.

keySelector
Func<TSource,TKey>

Fonction permettant d’extraire la clé de chaque élément.

elementSelector
Func<TSource,TElement>

Fonction permettant de mapper chaque élément source à un élément d’un IGrouping<TKey,TElement>.

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

Fonction permettant de créer une valeur de résultat à partir de chaque groupe.

comparer
IEqualityComparer<TKey>

À IEqualityComparer<T> comparer aux clés.

Retours

IEnumerable<TResult>

Collection d’éléments de type TResult où chaque élément représente une projection sur un groupe et sa clé.

Exceptions

source ou keySelector ou elementSelectorresultSelector est null.

Voir aussi

S’applique à

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

Regroupe les éléments d’une séquence en fonction d’une fonction de sélecteur de clé spécifiée et projette les éléments pour chaque groupe à l’aide d’une fonction spécifiée.

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

Paramètres de type

TSource

Type des éléments de source.

TKey

Type de la clé retournée par keySelector.

TElement

Type des éléments dans le IGrouping<TKey,TElement>.

Paramètres

source
IEnumerable<TSource>

Dont IEnumerable<T> les éléments à regrouper.

keySelector
Func<TSource,TKey>

Fonction permettant d’extraire la clé de chaque élément.

elementSelector
Func<TSource,TElement>

Fonction permettant de mapper chaque élément source à un élément dans le IGrouping<TKey,TElement>.

Retours

IEnumerable<IGrouping<TKey,TElement>>

Un IEnumerable<IGrouping<TKey, TElement>> en C# ou IEnumerable(Of IGrouping(Of TKey, TElement)) dans Visual Basic où chaque objet IGrouping<TKey,TElement> contient une collection d’objets de type TElement et d’une clé.

Exceptions

source keySelector ou elementSelector est null.

Exemples

L’exemple de code suivant montre comment regrouper GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) les éléments d’une séquence.

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.
    Console.WriteLine(output.ToString)
End Sub

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

Dans la syntaxe d’expression de requête, une clause group by (C#) ou Group By Into (Visual Basic) se traduit par un appel de GroupBy. La traduction de l’expression de requête dans l’exemple suivant équivaut à la requête dans l’exemple ci-dessus.

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

Note

Dans une expression de requête C# ou Visual Basic, les expressions de sélection d’élément et de clé se produisent dans l’ordre inverse de leurs positions d’argument dans un appel à la méthode GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>).

Remarques

Cette méthode est implémentée à l’aide de l’exécution différée. La valeur de retour immédiate est un objet qui stocke toutes les informations requises pour effectuer l’action. La requête représentée par cette méthode n’est pas exécutée tant que l’objet n’est pas énuméré en appelant directement sa méthode GetEnumerator ou en utilisant foreach en C# ou For Each dans Visual Basic.

La GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) méthode retourne une collection d’objets IGrouping<TKey,TElement> , une pour chaque clé distincte qui a été rencontrée. Il IGrouping<TKey,TElement> s’agit d’une IEnumerable<T> clé associée à ses éléments.

Les IGrouping<TKey,TElement> objets sont générés dans un ordre basé sur l’ordre des éléments dans source lequel a produit la première clé de chaque IGrouping<TKey,TElement>. Les éléments d’un regroupement sont générés dans l’ordre dans lequel les éléments générés apparaissent.source

Le comparateur Default d’égalité par défaut est utilisé pour comparer les clés.

Voir aussi

S’applique à

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

Regroupe les éléments d’une séquence en fonction d’une fonction de sélecteur de clé. Les clés sont comparées à l’aide d’un comparateur et les éléments de chaque groupe sont projetés à l’aide d’une fonction spécifiée.

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

Paramètres de type

TSource

Type des éléments de source.

TKey

Type de la clé retournée par keySelector.

TElement

Type des éléments dans le IGrouping<TKey,TElement>.

Paramètres

source
IEnumerable<TSource>

Dont IEnumerable<T> les éléments à regrouper.

keySelector
Func<TSource,TKey>

Fonction permettant d’extraire la clé de chaque élément.

elementSelector
Func<TSource,TElement>

Fonction permettant de mapper chaque élément source à un élément d’un IGrouping<TKey,TElement>.

comparer
IEqualityComparer<TKey>

Pour IEqualityComparer<T> comparer les clés.

Retours

IEnumerable<IGrouping<TKey,TElement>>

Un IEnumerable<IGrouping<TKey, TElement>> en C# ou IEnumerable(Of IGrouping(Of TKey, TElement)) dans Visual Basic où chaque objet IGrouping<TKey,TElement> contient une collection d’objets de type TElement et d’une clé.

Exceptions

source keySelector ou elementSelector est null.

Remarques

Cette méthode est implémentée à l’aide de l’exécution différée. La valeur de retour immédiate est un objet qui stocke toutes les informations requises pour effectuer l’action. La requête représentée par cette méthode n’est pas exécutée tant que l’objet n’est pas énuméré en appelant directement sa méthode GetEnumerator ou en utilisant foreach en C# ou For Each dans Visual Basic.

La GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>) méthode retourne une collection d’objets IGrouping<TKey,TElement> , une pour chaque clé distincte qui a été rencontrée. Il IGrouping<TKey,TElement> s’agit d’une IEnumerable<T> clé associée à ses éléments.

Les IGrouping<TKey,TElement> objets sont générés dans un ordre basé sur l’ordre des éléments dans source lequel a produit la première clé de chaque IGrouping<TKey,TElement>. Les éléments d’un regroupement sont générés dans l’ordre dans lequel les éléments générés apparaissent.source

Si comparer c’est nullle cas, le comparateur Default d’égalité par défaut est utilisé pour comparer les clés.

Si deux clés sont considérées comme égales, comparerla première clé est choisie comme clé pour ce regroupement.

Dans la syntaxe d’expression de requête, une clause group by (C#) ou Group By Into (Visual Basic) se traduit par un appel de GroupBy. Pour plus d’informations et d’exemples d’utilisation, consultez la clause group et la clause Group By.

Voir aussi

S’applique à

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

Regroupe les éléments d’une séquence en fonction d’une fonction de sélecteur de clé spécifiée et crée une valeur de résultat à partir de chaque groupe et de sa clé.

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)

Paramètres de type

TSource

Type des éléments de source.

TKey

Type de la clé retournée par keySelector.

TResult

Type de la valeur de résultat retournée par resultSelector.

Paramètres

source
IEnumerable<TSource>

Dont IEnumerable<T> les éléments à regrouper.

keySelector
Func<TSource,TKey>

Fonction permettant d’extraire la clé de chaque élément.

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

Fonction permettant de créer une valeur de résultat à partir de chaque groupe.

Retours

IEnumerable<TResult>

Collection d’éléments de type TResult où chaque élément représente une projection sur un groupe et sa clé.

Exceptions

source keySelector ou resultSelector est null.

Exemples

L’exemple de code suivant montre comment regrouper GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>) les éléments d’une séquence et projeter une séquence de résultats de type 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.
    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

Remarques

Dans la syntaxe d’expression de requête, une clause group by (C#) ou Group By Into (Visual Basic) se traduit par un appel de GroupBy.

Voir aussi

S’applique à

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

Regroupe les éléments d’une séquence en fonction d’une fonction de sélecteur de clé spécifiée et crée une valeur de résultat à partir de chaque groupe et de sa clé. Les clés sont comparées à l’aide d’un comparateur spécifié.

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)

Paramètres de type

TSource

Type des éléments de source.

TKey

Type de la clé retournée par keySelector.

TResult

Type de la valeur de résultat retournée par resultSelector.

Paramètres

source
IEnumerable<TSource>

Dont IEnumerable<T> les éléments à regrouper.

keySelector
Func<TSource,TKey>

Fonction permettant d’extraire la clé de chaque élément.

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

Fonction permettant de créer une valeur de résultat à partir de chaque groupe.

comparer
IEqualityComparer<TKey>

À IEqualityComparer<T> comparer aux clés.

Retours

IEnumerable<TResult>

Collection d’éléments de type TResult où chaque élément représente une projection sur un groupe et sa clé.

Exceptions

source keySelector ou resultSelector est null.

Voir aussi

S’applique à

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

Regroupe les éléments d’une séquence en fonction d’une fonction de sélecteur de clé spécifiée.

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

Paramètres de type

TSource

Type des éléments de source.

TKey

Type de la clé retournée par keySelector.

Paramètres

source
IEnumerable<TSource>

Dont IEnumerable<T> les éléments à regrouper.

keySelector
Func<TSource,TKey>

Fonction permettant d’extraire la clé de chaque élément.

Retours

IEnumerable<IGrouping<TKey,TSource>>

En IEnumerable<IGrouping<TKey, TSource>> C# ou IEnumerable(Of IGrouping(Of TKey, TSource)) en Visual Basic où chaque IGrouping<TKey,TElement> objet contient une séquence d’objets et une clé.

Exceptions

source ou keySelector est null.

Remarques

Cette méthode est implémentée à l’aide de l’exécution différée. La valeur de retour immédiate est un objet qui stocke toutes les informations requises pour effectuer l’action. La requête représentée par cette méthode n’est pas exécutée tant que l’objet n’est pas énuméré en appelant directement sa méthode GetEnumerator ou en utilisant foreach en C# ou For Each dans Visual Basic.

La GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) méthode retourne une collection d’objets IGrouping<TKey,TElement> , une pour chaque clé distincte qui a été rencontrée. Il IGrouping<TKey,TElement> s’agit d’une IEnumerable<T> clé associée à ses éléments.

Les IGrouping<TKey,TElement> objets sont générés dans un ordre basé sur l’ordre des éléments dans source lequel a produit la première clé de chaque IGrouping<TKey,TElement>. Les éléments d’un regroupement sont générés dans l’ordre dans sourcelequel ils apparaissent.

Le comparateur Default d’égalité par défaut est utilisé pour comparer les clés.

Dans la syntaxe d’expression de requête, une clause group by (C#) ou Group By Into (Visual Basic) se traduit par un appel de GroupBy. Pour plus d’informations et d’exemples d’utilisation, consultez la clause group et la clause Group By.

Voir aussi

S’applique à

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

Regroupe les éléments d’une séquence en fonction d’une fonction de sélecteur de clé spécifiée et compare les clés à l’aide d’un comparateur spécifié.

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

Paramètres de type

TSource

Type des éléments de source.

TKey

Type de la clé retournée par keySelector.

Paramètres

source
IEnumerable<TSource>

Dont IEnumerable<T> les éléments à regrouper.

keySelector
Func<TSource,TKey>

Fonction permettant d’extraire la clé de chaque élément.

comparer
IEqualityComparer<TKey>

Pour IEqualityComparer<T> comparer les clés.

Retours

IEnumerable<IGrouping<TKey,TSource>>

Un IEnumerable<IGrouping<TKey, TSource>> en C# ou IEnumerable(Of IGrouping(Of TKey, TSource)) dans Visual Basic où chaque objet IGrouping<TKey,TElement> contient une collection d’objets et une clé.

Exceptions

source ou keySelector est null.

Remarques

Cette méthode est implémentée à l’aide de l’exécution différée. La valeur de retour immédiate est un objet qui stocke toutes les informations requises pour effectuer l’action. La requête représentée par cette méthode n’est pas exécutée tant que l’objet n’est pas énuméré en appelant directement sa méthode GetEnumerator ou en utilisant foreach en C# ou For Each dans Visual Basic.

La GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) méthode retourne une collection d’objets IGrouping<TKey,TElement> , une pour chaque clé distincte qui a été rencontrée. Il IGrouping<TKey,TElement> s’agit d’une IEnumerable<T> clé associée à ses éléments.

Les IGrouping<TKey,TElement> objets sont générés dans un ordre basé sur l’ordre des éléments dans source lequel a produit la première clé de chaque IGrouping<TKey,TElement>. Les éléments d’un regroupement sont générés dans l’ordre dans sourcelequel ils apparaissent.

Si comparer c’est nullle cas, le comparateur Default d’égalité par défaut est utilisé pour comparer les clés.

Si deux clés sont considérées comme égales, comparerla première clé est choisie comme clé pour ce regroupement.

Dans la syntaxe d’expression de requête, une clause group by (C#) ou Group By Into (Visual Basic) se traduit par un appel de GroupBy. Pour plus d’informations et d’exemples d’utilisation, consultez la clause group et la clause Group By.

Voir aussi

S’applique à