Enumerable.GroupBy Método

Definição

Agrupa os elementos de uma sequência.

Sobrecargas

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

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e cria um valor de resultado a partir de cada grupo e da sua chave. Os elementos de cada grupo são projetados usando uma função especificada.

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

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e cria um valor de resultado a partir de cada grupo e da sua chave. Os valores-chave são comparados usando um comparador especificado, e os elementos de cada grupo são projetados usando uma função especificada.

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

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e projeta os elementos para cada grupo usando uma função especificada.

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

Agrupa os elementos de uma sequência de acordo com uma função seletora de tecla. As chaves são comparadas usando um comparador e os elementos de cada grupo são projetados usando uma função especificada.

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

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e cria um valor de resultado a partir de cada grupo e da sua chave.

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

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e cria um valor de resultado a partir de cada grupo e da sua chave. As chaves são comparadas usando um comparador especificado.

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

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada.

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

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e compara as chaves usando um comparador especificado.

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

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e cria um valor de resultado a partir de cada grupo e da sua chave. Os elementos de cada grupo são projetados usando uma função especificada.

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)

Parâmetros de Tipo Genérico

TSource

O tipo dos elementos de source.

TKey

O tipo da chave devolvido por keySelector.

TElement

O tipo dos elementos em cada IGrouping<TKey,TElement>.

TResult

O tipo do valor do resultado devolvido por resultSelector.

Parâmetros

source
IEnumerable<TSource>

E IEnumerable<T> cujos elementos para agrupar.

keySelector
Func<TSource,TKey>

Uma função para extrair a chave de cada elemento.

elementSelector
Func<TSource,TElement>

Uma função para mapear cada elemento fonte para um elemento num IGrouping<TKey,TElement>.

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

Uma função para criar um valor de resultado a partir de cada grupo.

Devoluções

IEnumerable<TResult>

Uma coleção de elementos do tipo TResult onde cada elemento representa uma projeção sobre um grupo e a sua chave.

Exceções

source ou keySelector ou elementSelector ou resultSelector é null.

Exemplos

O exemplo de código seguinte demonstra como usar GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>) para agrupar os elementos projetados de uma sequência e depois projetar uma sequência de resultados do tipo 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

Observações

Na sintaxe de expressão de consulta, uma cláusula group by (C#) ou Group By Into (Visual Basic) traduz-se numa invocação de GroupBy.

Ver também

Aplica-se a

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

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e cria um valor de resultado a partir de cada grupo e da sua chave. Os valores-chave são comparados usando um comparador especificado, e os elementos de cada grupo são projetados usando uma função especificada.

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)

Parâmetros de Tipo Genérico

TSource

O tipo dos elementos de source.

TKey

O tipo da chave devolvido por keySelector.

TElement

O tipo dos elementos em cada IGrouping<TKey,TElement>.

TResult

O tipo do valor do resultado devolvido por resultSelector.

Parâmetros

source
IEnumerable<TSource>

E IEnumerable<T> cujos elementos para agrupar.

keySelector
Func<TSource,TKey>

Uma função para extrair a chave de cada elemento.

elementSelector
Func<TSource,TElement>

Uma função para mapear cada elemento fonte para um elemento num IGrouping<TKey,TElement>.

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

Uma função para criar um valor de resultado a partir de cada grupo.

comparer
IEqualityComparer<TKey>

E IEqualityComparer<T> para comparar chaves.

Devoluções

IEnumerable<TResult>

Uma coleção de elementos do tipo TResult onde cada elemento representa uma projeção sobre um grupo e a sua chave.

Exceções

source ou keySelector ou elementSelector ou resultSelector é null.

Ver também

Aplica-se a

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

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e projeta os elementos para cada grupo usando uma função especificada.

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

Parâmetros de Tipo Genérico

TSource

O tipo dos elementos de source.

TKey

O tipo da chave devolvido por keySelector.

TElement

O tipo dos elementos no IGrouping<TKey,TElement>.

Parâmetros

source
IEnumerable<TSource>

E IEnumerable<T> cujos elementos para agrupar.

keySelector
Func<TSource,TKey>

Uma função para extrair a chave de cada elemento.

elementSelector
Func<TSource,TElement>

Uma função para mapear cada elemento fonte para um elemento do IGrouping<TKey,TElement>.

Devoluções

IEnumerable<IGrouping<TKey,TElement>>

Um IEnumerable<IGrouping<TKey, TElement>> em C# ou IEnumerable(Of IGrouping(Of TKey, TElement)) em Visual Basic onde cada objeto IGrouping<TKey,TElement> contém uma coleção de objetos do tipo TElement e uma chave.

Exceções

source ou keySelector ou elementSelector é null.

Exemplos

O seguinte exemplo de código demonstra como usar GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) para agrupar os elementos de uma sequência.

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

Na sintaxe de expressão de consulta, uma cláusula group by (C#) ou Group By Into (Visual Basic) traduz-se numa invocação de GroupBy. A tradução da expressão de consulta no exemplo seguinte é equivalente à consulta no exemplo acima.

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

Numa expressão de consulta em C# ou Visual Basic, as expressões de seleção de elementos e chaves ocorrem na ordem inversa das suas posições argumentais numa chamada para o método GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>).

Observações

Este método é implementado através da execução diferida. O valor de retorno imediato é um objeto que armazena toda a informação necessária para realizar a ação. A consulta representada por este método não é executada até que o objeto seja enumerado, seja chamando diretamente o seu método GetEnumerator ou usando foreach em C# ou For Each em Visual Basic.

O GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) método devolve uma coleção de IGrouping<TKey,TElement> objetos, um para cada chave distinta encontrada. Um IGrouping<TKey,TElement> é um IEnumerable<T> que também tem uma chave associada aos seus elementos.

Os IGrouping<TKey,TElement> objetos são obtidos numa ordem baseada na ordem dos elementos em source que produziram a primeira chave de cada IGrouping<TKey,TElement>. Os elementos de um agrupamento são obtidos pela ordem em que os elementos que os produziram aparecem em source.

O comparador Default de igualdade por defeito é usado para comparar chaves.

Ver também

Aplica-se a

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

Agrupa os elementos de uma sequência de acordo com uma função seletora de tecla. As chaves são comparadas usando um comparador e os elementos de cada grupo são projetados usando uma função especificada.

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

Parâmetros de Tipo Genérico

TSource

O tipo dos elementos de source.

TKey

O tipo da chave devolvido por keySelector.

TElement

O tipo dos elementos no IGrouping<TKey,TElement>.

Parâmetros

source
IEnumerable<TSource>

E IEnumerable<T> cujos elementos para agrupar.

keySelector
Func<TSource,TKey>

Uma função para extrair a chave de cada elemento.

elementSelector
Func<TSource,TElement>

Uma função para mapear cada elemento fonte para um elemento num IGrouping<TKey,TElement>.

comparer
IEqualityComparer<TKey>

E IEqualityComparer<T> para comparar tonalidades.

Devoluções

IEnumerable<IGrouping<TKey,TElement>>

Um IEnumerable<IGrouping<TKey, TElement>> em C# ou IEnumerable(Of IGrouping(Of TKey, TElement)) em Visual Basic onde cada objeto IGrouping<TKey,TElement> contém uma coleção de objetos do tipo TElement e uma chave.

Exceções

source ou keySelector ou elementSelector é null.

Observações

Este método é implementado através da execução diferida. O valor de retorno imediato é um objeto que armazena toda a informação necessária para realizar a ação. A consulta representada por este método não é executada até que o objeto seja enumerado, seja chamando diretamente o seu método GetEnumerator ou usando foreach em C# ou For Each em Visual Basic.

O GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>) método devolve uma coleção de IGrouping<TKey,TElement> objetos, um para cada chave distinta encontrada. Um IGrouping<TKey,TElement> é um IEnumerable<T> que também tem uma chave associada aos seus elementos.

Os IGrouping<TKey,TElement> objetos são obtidos numa ordem baseada na ordem dos elementos em source que produziram a primeira chave de cada IGrouping<TKey,TElement>. Os elementos de um agrupamento são obtidos pela ordem em que os elementos que os produziram aparecem em source.

Se comparer for null, o comparador Default de igualdade padrão é usado para comparar chaves.

Se duas tonalidades forem consideradas iguais segundo comparer, a primeira chave é escolhida como chave para esse agrupamento.

Na sintaxe de expressão de consulta, uma cláusula group by (C#) ou Group By Into (Visual Basic) traduz-se numa invocação de GroupBy. Para mais informações e exemplos de utilização, consulte cláusula de grupo e Cláusula de Grupo por Cláusula.

Ver também

Aplica-se a

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

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e cria um valor de resultado a partir de cada grupo e da sua chave.

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)

Parâmetros de Tipo Genérico

TSource

O tipo dos elementos de source.

TKey

O tipo da chave devolvido por keySelector.

TResult

O tipo do valor do resultado devolvido por resultSelector.

Parâmetros

source
IEnumerable<TSource>

E IEnumerable<T> cujos elementos para agrupar.

keySelector
Func<TSource,TKey>

Uma função para extrair a chave de cada elemento.

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

Uma função para criar um valor de resultado a partir de cada grupo.

Devoluções

IEnumerable<TResult>

Uma coleção de elementos do tipo TResult onde cada elemento representa uma projeção sobre um grupo e a sua chave.

Exceções

source ou keySelector ou resultSelector é null.

Exemplos

O exemplo de código seguinte demonstra como usar GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>) para agrupar os elementos de uma sequência e projetar uma sequência de resultados do tipo 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

Observações

Na sintaxe de expressão de consulta, uma cláusula group by (C#) ou Group By Into (Visual Basic) traduz-se numa invocação de GroupBy.

Ver também

Aplica-se a

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

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e cria um valor de resultado a partir de cada grupo e da sua chave. As chaves são comparadas usando um comparador especificado.

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)

Parâmetros de Tipo Genérico

TSource

O tipo dos elementos de source.

TKey

O tipo da chave devolvido por keySelector.

TResult

O tipo do valor do resultado devolvido por resultSelector.

Parâmetros

source
IEnumerable<TSource>

E IEnumerable<T> cujos elementos para agrupar.

keySelector
Func<TSource,TKey>

Uma função para extrair a chave de cada elemento.

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

Uma função para criar um valor de resultado a partir de cada grupo.

comparer
IEqualityComparer<TKey>

E IEqualityComparer<T> para comparar chaves.

Devoluções

IEnumerable<TResult>

Uma coleção de elementos do tipo TResult onde cada elemento representa uma projeção sobre um grupo e a sua chave.

Exceções

source ou keySelector ou resultSelector é null.

Ver também

Aplica-se a

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

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada.

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

Parâmetros de Tipo Genérico

TSource

O tipo dos elementos de source.

TKey

O tipo da chave devolvido por keySelector.

Parâmetros

source
IEnumerable<TSource>

E IEnumerable<T> cujos elementos para agrupar.

keySelector
Func<TSource,TKey>

Uma função para extrair a chave de cada elemento.

Devoluções

IEnumerable<IGrouping<TKey,TSource>>

Um IEnumerable<IGrouping<TKey, TSource>> em C# ou IEnumerable(Of IGrouping(Of TKey, TSource)) em Visual Basic onde cada objeto IGrouping<TKey,TElement> contém uma sequência de objetos e uma chave.

Exceções

source ou keySelector é null.

Observações

Este método é implementado através da execução diferida. O valor de retorno imediato é um objeto que armazena toda a informação necessária para realizar a ação. A consulta representada por este método não é executada até que o objeto seja enumerado, seja chamando diretamente o seu método GetEnumerator ou usando foreach em C# ou For Each em Visual Basic.

O GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) método devolve uma coleção de IGrouping<TKey,TElement> objetos, um para cada chave distinta encontrada. Um IGrouping<TKey,TElement> é um IEnumerable<T> que também tem uma chave associada aos seus elementos.

Os IGrouping<TKey,TElement> objetos são obtidos numa ordem baseada na ordem dos elementos em source que produziram a primeira chave de cada IGrouping<TKey,TElement>. Os elementos de um agrupamento são obtidos na ordem em que aparecem em source.

O comparador Default de igualdade por defeito é usado para comparar chaves.

Na sintaxe de expressão de consulta, uma cláusula group by (C#) ou Group By Into (Visual Basic) traduz-se numa invocação de GroupBy. Para mais informações e exemplos de utilização, consulte cláusula de grupo e Cláusula de Grupo por Cláusula.

Ver também

Aplica-se a

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

Agrupa os elementos de uma sequência de acordo com uma função seletora de teclas especificada e compara as chaves usando um comparador especificado.

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

Parâmetros de Tipo Genérico

TSource

O tipo dos elementos de source.

TKey

O tipo da chave devolvido por keySelector.

Parâmetros

source
IEnumerable<TSource>

E IEnumerable<T> cujos elementos para agrupar.

keySelector
Func<TSource,TKey>

Uma função para extrair a chave de cada elemento.

comparer
IEqualityComparer<TKey>

E IEqualityComparer<T> para comparar tonalidades.

Devoluções

IEnumerable<IGrouping<TKey,TSource>>

Um IEnumerable<IGrouping<TKey, TSource>> em C# ou IEnumerable(Of IGrouping(Of TKey, TSource)) em Visual Basic onde cada objeto IGrouping<TKey,TElement> contém uma coleção de objetos e uma chave.

Exceções

source ou keySelector é null.

Observações

Este método é implementado através da execução diferida. O valor de retorno imediato é um objeto que armazena toda a informação necessária para realizar a ação. A consulta representada por este método não é executada até que o objeto seja enumerado, seja chamando diretamente o seu método GetEnumerator ou usando foreach em C# ou For Each em Visual Basic.

O GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) método devolve uma coleção de IGrouping<TKey,TElement> objetos, um para cada chave distinta encontrada. Um IGrouping<TKey,TElement> é um IEnumerable<T> que também tem uma chave associada aos seus elementos.

Os IGrouping<TKey,TElement> objetos são obtidos numa ordem baseada na ordem dos elementos em source que produziram a primeira chave de cada IGrouping<TKey,TElement>. Os elementos de um agrupamento são obtidos na ordem em que aparecem em source.

Se comparer for null, o comparador Default de igualdade padrão é usado para comparar chaves.

Se duas tonalidades forem consideradas iguais segundo comparer, a primeira chave é escolhida como chave para esse agrupamento.

Na sintaxe de expressão de consulta, uma cláusula group by (C#) ou Group By Into (Visual Basic) traduz-se numa invocação de GroupBy. Para mais informações e exemplos de utilização, consulte cláusula de grupo e Cláusula de Grupo por Cláusula.

Ver também

Aplica-se a