Enumerable.GroupBy Methode

Definitie

Hiermee worden de elementen van een reeks gegroepeerd.

Overloads

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

Groepeer de elementen van een reeks op basis van een opgegeven sleutelkiezerfunctie en maakt een resultaatwaarde van elke groep en de bijbehorende sleutel. De elementen van elke groep worden geprojecteerd met behulp van een opgegeven functie.

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

Groepeer de elementen van een reeks op basis van een opgegeven sleutelkiezerfunctie en maakt een resultaatwaarde van elke groep en de bijbehorende sleutel. Sleutelwaarden worden vergeleken met behulp van een opgegeven vergelijkingsfunctie en de elementen van elke groep worden geprojecteerd met behulp van een opgegeven functie.

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

Groepeert de elementen van een reeks op basis van een opgegeven sleutelkiezerfunctie en projecteert de elementen voor elke groep met behulp van een opgegeven functie.

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

Hiermee worden de elementen van een reeks gegroepeerd op basis van een sleutelkiezerfunctie. De sleutels worden vergeleken met behulp van een vergelijkingsfunctie en de elementen van elke groep worden geprojecteerd met behulp van een opgegeven functie.

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

Groepeer de elementen van een reeks op basis van een opgegeven sleutelkiezerfunctie en maakt een resultaatwaarde van elke groep en de bijbehorende sleutel.

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

Groepeer de elementen van een reeks op basis van een opgegeven sleutelkiezerfunctie en maakt een resultaatwaarde van elke groep en de bijbehorende sleutel. De sleutels worden vergeleken met behulp van een opgegeven vergelijkingsfunctie.

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

Hiermee worden de elementen van een reeks gegroepeerd op basis van een opgegeven sleutelkiezerfunctie.

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

Groepeert de elementen van een reeks op basis van een opgegeven sleutelkiezerfunctie en vergelijkt de sleutels met behulp van een opgegeven vergelijkingsfunctie.

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

Groepeer de elementen van een reeks op basis van een opgegeven sleutelkiezerfunctie en maakt een resultaatwaarde van elke groep en de bijbehorende sleutel. De elementen van elke groep worden geprojecteerd met behulp van een opgegeven functie.

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

Het type van de elementen van source.

TKey

Het type sleutel dat wordt geretourneerd door keySelector.

TElement

Het type van de elementen in elke IGrouping<TKey,TElement>.

TResult

Het type van de resultaatwaarde die wordt geretourneerd door resultSelector.

Parameters

source
IEnumerable<TSource>

Een IEnumerable<T> van de elementen die moeten worden gegroepeerd.

keySelector
Func<TSource,TKey>

Een functie om de sleutel voor elk element te extraheren.

elementSelector
Func<TSource,TElement>

Een functie om elk bronelement toe te wijzen aan een element in een IGrouping<TKey,TElement>.

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

Een functie voor het maken van een resultaatwaarde van elke groep.

Retouren

IEnumerable<TResult>

Een verzameling elementen van het type TResult waarbij elk element een projectie vertegenwoordigt voor een groep en de bijbehorende sleutel.

Uitzonderingen

source elementSelector of keySelector of resultSelector is null.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>) u de projectelementen van een reeks groepeert en vervolgens een reeks resultaten van het type TResultprojecteert.

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

Opmerkingen

In de syntaxis van de query-expressie wordt een component group by (C#) of Group By Into (Visual Basic) omgezet in een aanroep van GroupBy.

Zie ook

Van toepassing op

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

Groepeer de elementen van een reeks op basis van een opgegeven sleutelkiezerfunctie en maakt een resultaatwaarde van elke groep en de bijbehorende sleutel. Sleutelwaarden worden vergeleken met behulp van een opgegeven vergelijkingsfunctie en de elementen van elke groep worden geprojecteerd met behulp van een opgegeven functie.

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)

Type parameters

TSource

Het type van de elementen van source.

TKey

Het type sleutel dat wordt geretourneerd door keySelector.

TElement

Het type van de elementen in elke IGrouping<TKey,TElement>.

TResult

Het type van de resultaatwaarde die wordt geretourneerd door resultSelector.

Parameters

source
IEnumerable<TSource>

Een IEnumerable<T> van de elementen die moeten worden gegroepeerd.

keySelector
Func<TSource,TKey>

Een functie om de sleutel voor elk element te extraheren.

elementSelector
Func<TSource,TElement>

Een functie om elk bronelement toe te wijzen aan een element in een IGrouping<TKey,TElement>.

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

Een functie voor het maken van een resultaatwaarde van elke groep.

comparer
IEqualityComparer<TKey>

Een IEqualityComparer<T> om sleutels te vergelijken met.

Retouren

IEnumerable<TResult>

Een verzameling elementen van het type TResult waarbij elk element een projectie vertegenwoordigt voor een groep en de bijbehorende sleutel.

Uitzonderingen

source elementSelector of keySelector of resultSelector is null.

Zie ook

Van toepassing op

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

Groepeert de elementen van een reeks op basis van een opgegeven sleutelkiezerfunctie en projecteert de elementen voor elke groep met behulp van een opgegeven functie.

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

Het type van de elementen van source.

TKey

Het type sleutel dat wordt geretourneerd door keySelector.

TElement

Het type van de elementen in de IGrouping<TKey,TElement>.

Parameters

source
IEnumerable<TSource>

Een IEnumerable<T> van de elementen die moeten worden gegroepeerd.

keySelector
Func<TSource,TKey>

Een functie om de sleutel voor elk element te extraheren.

elementSelector
Func<TSource,TElement>

Een functie om elk bronelement toe te wijzen aan een element in de IGrouping<TKey,TElement>.

Retouren

IEnumerable<IGrouping<TKey,TElement>>

Een IEnumerable<IGrouping<TKey, TElement>> in C# of IEnumerable(Of IGrouping(Of TKey, TElement)) in Visual Basic waarbij elk IGrouping<TKey,TElement>-object een verzameling objecten van het type TElement en een sleutel bevat.

Uitzonderingen

source elementSelector of keySelector is null.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u de elementen van een reeks kunt groeperen GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) .

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

In de syntaxis van de query-expressie wordt een component group by (C#) of Group By Into (Visual Basic) omgezet in een aanroep van GroupBy. De vertaling van de query-expressie in het volgende voorbeeld is gelijk aan de query in het bovenstaande voorbeeld.

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

In een C# of Visual Basic query-expressie vinden de element- en sleutelselectieexpressies plaats in de omgekeerde volgorde van hun argumentposities in een aanroep naar de methode GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>).

Opmerkingen

Deze methode wordt geïmplementeerd met behulp van de uitgestelde uitvoering. De onmiddellijke retourwaarde is een object waarin alle informatie wordt opgeslagen die nodig is om de actie uit te voeren. De query die door deze methode wordt vertegenwoordigd, wordt pas uitgevoerd nadat het object is geïnventariseerd door de methode GetEnumerator rechtstreeks aan te roepen of door foreach te gebruiken in C# of For Each in Visual Basic.

De GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) methode retourneert een verzameling IGrouping<TKey,TElement> objecten, één voor elke afzonderlijke sleutel die is aangetroffen. Een IGrouping<TKey,TElement> is een IEnumerable<T> die ook een sleutel heeft die is gekoppeld aan de bijbehorende elementen.

De IGrouping<TKey,TElement> objecten worden gegenereerd in een volgorde op basis van de volgorde van de elementen in source die de eerste sleutel van elk IGrouping<TKey,TElement>element hebben geproduceerd. Elementen in een groepering worden gegenereerd in de volgorde waarin de elementen waarin ze zijn geproduceerd, worden weergegeven in source.

De standaard gelijkheidsgelijker Default wordt gebruikt om sleutels te vergelijken.

Zie ook

Van toepassing op

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

Hiermee worden de elementen van een reeks gegroepeerd op basis van een sleutelkiezerfunctie. De sleutels worden vergeleken met behulp van een vergelijkingsfunctie en de elementen van elke groep worden geprojecteerd met behulp van een opgegeven functie.

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

Type parameters

TSource

Het type van de elementen van source.

TKey

Het type sleutel dat wordt geretourneerd door keySelector.

TElement

Het type van de elementen in de IGrouping<TKey,TElement>.

Parameters

source
IEnumerable<TSource>

Een IEnumerable<T> van de elementen die moeten worden gegroepeerd.

keySelector
Func<TSource,TKey>

Een functie om de sleutel voor elk element te extraheren.

elementSelector
Func<TSource,TElement>

Een functie om elk bronelement toe te wijzen aan een element in een IGrouping<TKey,TElement>.

comparer
IEqualityComparer<TKey>

Een IEqualityComparer<T> om sleutels te vergelijken.

Retouren

IEnumerable<IGrouping<TKey,TElement>>

Een IEnumerable<IGrouping<TKey, TElement>> in C# of IEnumerable(Of IGrouping(Of TKey, TElement)) in Visual Basic waarbij elk IGrouping<TKey,TElement>-object een verzameling objecten van het type TElement en een sleutel bevat.

Uitzonderingen

source elementSelector of keySelector is null.

Opmerkingen

Deze methode wordt geïmplementeerd met behulp van de uitgestelde uitvoering. De onmiddellijke retourwaarde is een object waarin alle informatie wordt opgeslagen die nodig is om de actie uit te voeren. De query die door deze methode wordt vertegenwoordigd, wordt pas uitgevoerd nadat het object is geïnventariseerd door de methode GetEnumerator rechtstreeks aan te roepen of door foreach te gebruiken in C# of For Each in Visual Basic.

De GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>) methode retourneert een verzameling IGrouping<TKey,TElement> objecten, één voor elke afzonderlijke sleutel die is aangetroffen. Een IGrouping<TKey,TElement> is een IEnumerable<T> die ook een sleutel heeft die is gekoppeld aan de bijbehorende elementen.

De IGrouping<TKey,TElement> objecten worden gegenereerd in een volgorde op basis van de volgorde van de elementen in source die de eerste sleutel van elk IGrouping<TKey,TElement>element hebben geproduceerd. Elementen in een groepering worden gegenereerd in de volgorde waarin de elementen waarin ze zijn geproduceerd, worden weergegeven in source.

Als comparer dat het is null, wordt de standaard gelijkheidsgelijker Default gebruikt om sleutels te vergelijken.

Als twee sleutels worden beschouwd als gelijk aan comparer, wordt de eerste sleutel gekozen als de sleutel voor die groepering.

In de syntaxis van de query-expressie wordt een component group by (C#) of Group By Into (Visual Basic) omgezet in een aanroep van GroupBy. Zie groepsclausule en Group By-component voor meer informatie en gebruiksvoorbeelden.

Zie ook

Van toepassing op

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

Groepeer de elementen van een reeks op basis van een opgegeven sleutelkiezerfunctie en maakt een resultaatwaarde van elke groep en de bijbehorende sleutel.

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

Het type van de elementen van source.

TKey

Het type sleutel dat wordt geretourneerd door keySelector.

TResult

Het type van de resultaatwaarde die wordt geretourneerd door resultSelector.

Parameters

source
IEnumerable<TSource>

Een IEnumerable<T> van de elementen die moeten worden gegroepeerd.

keySelector
Func<TSource,TKey>

Een functie om de sleutel voor elk element te extraheren.

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

Een functie voor het maken van een resultaatwaarde van elke groep.

Retouren

IEnumerable<TResult>

Een verzameling elementen van het type TResult waarbij elk element een projectie vertegenwoordigt voor een groep en de bijbehorende sleutel.

Uitzonderingen

source resultSelector of keySelector is null.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>) u de elementen van een reeks groepeert en een reeks resultaten van het type TResultprojecteert.

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

Opmerkingen

In de syntaxis van de query-expressie wordt een component group by (C#) of Group By Into (Visual Basic) omgezet in een aanroep van GroupBy.

Zie ook

Van toepassing op

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

Groepeer de elementen van een reeks op basis van een opgegeven sleutelkiezerfunctie en maakt een resultaatwaarde van elke groep en de bijbehorende sleutel. De sleutels worden vergeleken met behulp van een opgegeven vergelijkingsfunctie.

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)

Type parameters

TSource

Het type van de elementen van source.

TKey

Het type sleutel dat wordt geretourneerd door keySelector.

TResult

Het type van de resultaatwaarde die wordt geretourneerd door resultSelector.

Parameters

source
IEnumerable<TSource>

Een IEnumerable<T> van de elementen die moeten worden gegroepeerd.

keySelector
Func<TSource,TKey>

Een functie om de sleutel voor elk element te extraheren.

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

Een functie voor het maken van een resultaatwaarde van elke groep.

comparer
IEqualityComparer<TKey>

Een IEqualityComparer<T> om sleutels te vergelijken met.

Retouren

IEnumerable<TResult>

Een verzameling elementen van het type TResult waarbij elk element een projectie vertegenwoordigt voor een groep en de bijbehorende sleutel.

Uitzonderingen

source resultSelector of keySelector is null.

Zie ook

Van toepassing op

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

Hiermee worden de elementen van een reeks gegroepeerd op basis van een opgegeven sleutelkiezerfunctie.

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

Het type van de elementen van source.

TKey

Het type sleutel dat wordt geretourneerd door keySelector.

Parameters

source
IEnumerable<TSource>

Een IEnumerable<T> van de elementen die moeten worden gegroepeerd.

keySelector
Func<TSource,TKey>

Een functie om de sleutel voor elk element te extraheren.

Retouren

IEnumerable<IGrouping<TKey,TSource>>

Een IEnumerable<IGrouping<TKey, TSource>> in C# of IEnumerable(Of IGrouping(Of TKey, TSource)) in Visual Basic waarbij elk IGrouping<TKey,TElement>-object een reeks objecten en een sleutel bevat.

Uitzonderingen

source of keySelector is null.

Opmerkingen

Deze methode wordt geïmplementeerd met behulp van de uitgestelde uitvoering. De onmiddellijke retourwaarde is een object waarin alle informatie wordt opgeslagen die nodig is om de actie uit te voeren. De query die door deze methode wordt vertegenwoordigd, wordt pas uitgevoerd nadat het object is geïnventariseerd door de methode GetEnumerator rechtstreeks aan te roepen of door foreach te gebruiken in C# of For Each in Visual Basic.

De GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) methode retourneert een verzameling IGrouping<TKey,TElement> objecten, één voor elke afzonderlijke sleutel die is aangetroffen. Een IGrouping<TKey,TElement> is een IEnumerable<T> die ook een sleutel heeft die is gekoppeld aan de bijbehorende elementen.

De IGrouping<TKey,TElement> objecten worden gegenereerd in een volgorde op basis van de volgorde van de elementen in source die de eerste sleutel van elk IGrouping<TKey,TElement>element hebben geproduceerd. Elementen in een groepering worden geretourneerd in de volgorde waarin sourceze worden weergegeven.

De standaard gelijkheidsgelijker Default wordt gebruikt om sleutels te vergelijken.

In de syntaxis van de query-expressie wordt een component group by (C#) of Group By Into (Visual Basic) omgezet in een aanroep van GroupBy. Zie groepsclausule en Group By-component voor meer informatie en gebruiksvoorbeelden.

Zie ook

Van toepassing op

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

Groepeert de elementen van een reeks op basis van een opgegeven sleutelkiezerfunctie en vergelijkt de sleutels met behulp van een opgegeven vergelijkingsfunctie.

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

Type parameters

TSource

Het type van de elementen van source.

TKey

Het type sleutel dat wordt geretourneerd door keySelector.

Parameters

source
IEnumerable<TSource>

Een IEnumerable<T> van de elementen die moeten worden gegroepeerd.

keySelector
Func<TSource,TKey>

Een functie om de sleutel voor elk element te extraheren.

comparer
IEqualityComparer<TKey>

Een IEqualityComparer<T> om sleutels te vergelijken.

Retouren

IEnumerable<IGrouping<TKey,TSource>>

Een IEnumerable<IGrouping<TKey, TSource>> in C# of IEnumerable(Of IGrouping(Of TKey, TSource)) in Visual Basic waar elk IGrouping<TKey,TElement>-object een verzameling objecten en een sleutel bevat.

Uitzonderingen

source of keySelector is null.

Opmerkingen

Deze methode wordt geïmplementeerd met behulp van de uitgestelde uitvoering. De onmiddellijke retourwaarde is een object waarin alle informatie wordt opgeslagen die nodig is om de actie uit te voeren. De query die door deze methode wordt vertegenwoordigd, wordt pas uitgevoerd nadat het object is geïnventariseerd door de methode GetEnumerator rechtstreeks aan te roepen of door foreach te gebruiken in C# of For Each in Visual Basic.

De GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) methode retourneert een verzameling IGrouping<TKey,TElement> objecten, één voor elke afzonderlijke sleutel die is aangetroffen. Een IGrouping<TKey,TElement> is een IEnumerable<T> die ook een sleutel heeft die is gekoppeld aan de bijbehorende elementen.

De IGrouping<TKey,TElement> objecten worden gegenereerd in een volgorde op basis van de volgorde van de elementen in source die de eerste sleutel van elk IGrouping<TKey,TElement>element hebben geproduceerd. Elementen in een groepering worden geretourneerd in de volgorde waarin sourceze worden weergegeven.

Als comparer dat het is null, wordt de standaard gelijkheidsgelijker Default gebruikt om sleutels te vergelijken.

Als twee sleutels worden beschouwd als gelijk aan comparer, wordt de eerste sleutel gekozen als de sleutel voor die groepering.

In de syntaxis van de query-expressie wordt een component group by (C#) of Group By Into (Visual Basic) omgezet in een aanroep van GroupBy. Zie groepsclausule en Group By-component voor meer informatie en gebruiksvoorbeelden.

Zie ook

Van toepassing op