Queryable.GroupBy Método

Definição

Agrupa os elementos de uma sequência.

Sobrecargas

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

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

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

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

GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>)

Agrupa os elementos de uma sequência de acordo com a função de seletor de chave especificada e projeta os elementos de cada grupo usando uma função especificada.

GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>)

Agrupa os elementos de uma sequência e projeta os elementos para cada grupo usando uma função especificada. Os valores de chave são comparados usando um comparador especificado.

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

Agrupa os elementos de uma sequência de acordo com uma função do seletor de chave especificada e cria um valor de resultado de cada grupo e sua chave.

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

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

GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>)

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

GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>)

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

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

Agrupa os elementos de uma sequência de acordo com uma função do seletor de chave especificada e cria um valor de resultado de cada grupo e 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::Linq::IQueryable<TResult> ^ GroupBy(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector, System::Linq::Expressions::Expression<Func<TSource, TElement> ^> ^ elementSelector, System::Linq::Expressions::Expression<Func<TKey, System::Collections::Generic::IEnumerable<TElement> ^, TResult> ^> ^ resultSelector);
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TElement,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TElement>,TResult>> resultSelector);
static member GroupBy : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Linq.Expressions.Expression<Func<'Source, 'Element>> * System.Linq.Expressions.Expression<Func<'Key, seq<'Element>, 'Result>> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TElement, TResult) (source As IQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey)), elementSelector As Expression(Of Func(Of TSource, TElement)), resultSelector As Expression(Of Func(Of TKey, IEnumerable(Of TElement), TResult))) As IQueryable(Of TResult)

Parâmetros de tipo

TSource

O tipo dos elementos de source.

TKey

O tipo da chave retornada pela função representada em keySelector.

TElement

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

TResult

O tipo do valor de resultado retornado por resultSelector.

Parâmetros

source
IQueryable<TSource>

Um IQueryable<T> cujos elementos serão agrupados.

keySelector
Expression<Func<TSource,TKey>>

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

elementSelector
Expression<Func<TSource,TElement>>

Uma função para mapear cada elemento de origem para um elemento em um IGrouping<TKey,TElement>.

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

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

Retornos

IQueryable<TResult>

Um T:System.Linq.IQueryable`1 que tem um argumento de tipo de TResult e no qual cada elemento representa uma projeção sobre um grupo e sua chave.

Exceções

source ou keySelector ou elementSelector ou resultSelector é null.

Exemplos

O exemplo de código a seguir demonstra como usar GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey,IEnumerable<TElement>,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 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.AsQueryable().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

Shared 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 valuesby 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.AsQueryable().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 with this age: " & result.Count)
        output.AppendLine("Minimum age: " & result.Min)
        output.AppendLine("Maximum age: " & result.Max)
    Next

    ' Display the output.
    MsgBox(output.ToString())

    ' This code produces the following output:

    '  Age group: 8
    '  Number of pets with this age: 1
    '  Minimum age: 8.3
    '  Maximum age: 8.3

    '  Age group: 4
    '  Number of pets with this age: 2
    '  Minimum age: 4.3
    '  Maximum age: 4.9

    '  Age group: 1
    '  Number of pets with this age: 1
    '  Minimum age: 1.5
    '  Maximum age: 1.5
End Sub

Comentários

Esse método tem pelo menos um parâmetro de tipo Expression<TDelegate> cujo argumento de tipo é um dos Func<T,TResult> tipos. Para esses parâmetros, você pode passar uma expressão lambda e ela será compilada para um Expression<TDelegate>.

O GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey,IEnumerable<TElement>,TResult>>) método gera um MethodCallExpression que representa chamar GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey,IEnumerable<TElement>,TResult>>) a si mesmo como um método genérico construído. Em seguida, ele passa o MethodCallExpression CreateQuery<TElement>(Expression) método do IQueryProvider representado pela Provider propriedade do source parâmetro.

O comportamento de consulta que ocorre como resultado da execução de uma árvore de expressão que representa a chamada GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey,IEnumerable<TElement>,TResult>>) depende da implementação do tipo do source parâmetro. O comportamento esperado é que ele agrupa os elementos de source valores chave obtidos invocando keySelector cada elemento. O elementSelector parâmetro é usado para projetar os elementos de cada grupo e o resultSelector parâmetro é usado para obter um valor de resultado de cada grupo e sua chave.

Aplica-se a

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

Agrupa os elementos de uma sequência de acordo com uma função do seletor de chave especificada e cria um valor de resultado de cada grupo e sua chave. As chaves são comparadas 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::Linq::IQueryable<TResult> ^ GroupBy(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector, System::Linq::Expressions::Expression<Func<TSource, TElement> ^> ^ elementSelector, System::Linq::Expressions::Expression<Func<TKey, System::Collections::Generic::IEnumerable<TElement> ^, TResult> ^> ^ resultSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TElement,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TElement>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TElement,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TElement>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);
static member GroupBy : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Linq.Expressions.Expression<Func<'Source, 'Element>> * System.Linq.Expressions.Expression<Func<'Key, seq<'Element>, 'Result>> * System.Collections.Generic.IEqualityComparer<'Key> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TElement, TResult) (source As IQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey)), elementSelector As Expression(Of Func(Of TSource, TElement)), resultSelector As Expression(Of Func(Of TKey, IEnumerable(Of TElement), TResult)), comparer As IEqualityComparer(Of TKey)) As IQueryable(Of TResult)

Parâmetros de tipo

TSource

O tipo dos elementos de source.

TKey

O tipo da chave retornada pela função representada em keySelector.

TElement

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

TResult

O tipo do valor de resultado retornado por resultSelector.

Parâmetros

source
IQueryable<TSource>

Um IQueryable<T> cujos elementos serão agrupados.

keySelector
Expression<Func<TSource,TKey>>

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

elementSelector
Expression<Func<TSource,TElement>>

Uma função para mapear cada elemento de origem para um elemento em um IGrouping<TKey,TElement>.

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

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

comparer
IEqualityComparer<TKey>

Um IEqualityComparer<T> para comparar chaves.

Retornos

IQueryable<TResult>

Um T:System.Linq.IQueryable`1 que tem um argumento de tipo de TResult e no qual cada elemento representa uma projeção sobre um grupo e sua chave.

Exceções

source ou keySelector ou elementSelector ou resultSelector ou comparer é null.

Comentários

Esse método tem pelo menos um parâmetro de tipo Expression<TDelegate> cujo argumento de tipo é um dos Func<T,TResult> tipos. Para esses parâmetros, você pode passar uma expressão lambda e ela será compilada para um Expression<TDelegate>.

O GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey,IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>) método gera um MethodCallExpression que representa chamar GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey,IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>) a si mesmo como um método genérico construído. Em seguida, ele passa o MethodCallExpression CreateQuery<TElement>(Expression) método do IQueryProvider representado pela Provider propriedade do source parâmetro.

O comportamento de consulta que ocorre como resultado da execução de uma árvore de expressão que representa a chamada GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey,IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>) depende da implementação do tipo do source parâmetro. O comportamento esperado é que ele agrupa os elementos de source valores chave obtidos invocando keySelector cada elemento. O comparer parâmetro é usado para comparar valores de chave. O elementSelector parâmetro é usado para projetar os elementos de cada grupo e o resultSelector parâmetro é usado para obter um valor de resultado de cada grupo e sua chave.

Aplica-se a

GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>)

Agrupa os elementos de uma sequência de acordo com a função de seletor de chave especificada e projeta os elementos de cada grupo usando uma função especificada.

public:
generic <typename TSource, typename TKey, typename TElement>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IQueryable<System::Linq::IGrouping<TKey, TElement> ^> ^ GroupBy(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector, System::Linq::Expressions::Expression<Func<TSource, TElement> ^> ^ elementSelector);
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TElement>> GroupBy<TSource,TKey,TElement> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector);
static member GroupBy : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Linq.Expressions.Expression<Func<'Source, 'Element>> -> System.Linq.IQueryable<System.Linq.IGrouping<'Key, 'Element>>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TElement) (source As IQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey)), elementSelector As Expression(Of Func(Of TSource, TElement))) As IQueryable(Of IGrouping(Of TKey, TElement))

Parâmetros de tipo

TSource

O tipo dos elementos de source.

TKey

O tipo da chave retornada pela função representada em keySelector.

TElement

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

Parâmetros

source
IQueryable<TSource>

Um IQueryable<T> cujos elementos serão agrupados.

keySelector
Expression<Func<TSource,TKey>>

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

elementSelector
Expression<Func<TSource,TElement>>

Uma função para mapear cada elemento de origem para um elemento em um IGrouping<TKey,TElement>.

Retornos

IQueryable<IGrouping<TKey,TElement>>

Um IQueryable<IGrouping<TKey, TElement>> em C# ou IQueryable(Of IGrouping(Of TKey, TElement)) no Visual Basic em que cada IGrouping<TKey,TElement> contém uma sequência de objetos de tipo TElement e uma chave.

Exceções

source, keySelector ou elementSelector é null.

Exemplos

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

class Pet
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public static void GroupByEx2()
{
    // Create a list of Pet objects.
    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 Pet.Age as the key.
    // Use Pet.Name as the value for each entry.
    IEnumerable<IGrouping<int, string>> query =
        pets.AsQueryable().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

Shared Sub GroupByEx2()
    ' 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 Pet.Age as the key.
    ' Use Pet.Name as the value for each entry.
    Dim query As IEnumerable(Of IGrouping(Of Integer, String)) = _
        pets.AsQueryable().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(String.Format("  {0}", name))
        Next
    Next

    ' Display the output.
    MsgBox(output.ToString())
End Sub

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

Comentários

Esse método tem pelo menos um parâmetro de tipo Expression<TDelegate> cujo argumento de tipo é um dos Func<T,TResult> tipos. Para esses parâmetros, você pode passar uma expressão lambda e ela será compilada para um Expression<TDelegate>.

O GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>) método gera um MethodCallExpression que representa chamar GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>) a si mesmo como um método genérico construído. Em seguida, ele passa o MethodCallExpression CreateQuery<TElement>(Expression) método do IQueryProvider representado pela Provider propriedade do source parâmetro.

O comportamento de consulta que ocorre como resultado da execução de uma árvore de expressão que representa a chamada GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>) depende da implementação do tipo do source parâmetro. O comportamento esperado é que ele agrupa os elementos por source um valor de chave que é obtido invocando keySelector em cada elemento. Ele invoca elementSelector em cada elemento para obter um elemento de resultado.

Aplica-se a

GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>)

Agrupa os elementos de uma sequência e projeta os elementos para cada grupo usando uma função especificada. Os valores de chave são comparados usando um comparador especificado.

public:
generic <typename TSource, typename TKey, typename TElement>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IQueryable<System::Linq::IGrouping<TKey, TElement> ^> ^ GroupBy(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector, System::Linq::Expressions::Expression<Func<TSource, TElement> ^> ^ elementSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TElement>> GroupBy<TSource,TKey,TElement> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TElement>> GroupBy<TSource,TKey,TElement> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);
static member GroupBy : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Linq.Expressions.Expression<Func<'Source, 'Element>> * System.Collections.Generic.IEqualityComparer<'Key> -> System.Linq.IQueryable<System.Linq.IGrouping<'Key, 'Element>>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TElement) (source As IQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey)), elementSelector As Expression(Of Func(Of TSource, TElement)), comparer As IEqualityComparer(Of TKey)) As IQueryable(Of IGrouping(Of TKey, TElement))

Parâmetros de tipo

TSource

O tipo dos elementos de source.

TKey

O tipo da chave retornada pela função representada em keySelector.

TElement

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

Parâmetros

source
IQueryable<TSource>

Um IQueryable<T> cujos elementos serão agrupados.

keySelector
Expression<Func<TSource,TKey>>

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

elementSelector
Expression<Func<TSource,TElement>>

Uma função para mapear cada elemento de origem para um elemento em um IGrouping<TKey,TElement>.

comparer
IEqualityComparer<TKey>

Um IEqualityComparer<T> para comparar chaves.

Retornos

IQueryable<IGrouping<TKey,TElement>>

Um IQueryable<IGrouping<TKey, TElement>> em C# ou IQueryable(Of IGrouping(Of TKey, TElement)) no Visual Basic em que cada IGrouping<TKey,TElement> contém uma sequência de objetos de tipo TElement e uma chave.

Exceções

source ou keySelector ou elementSelector ou comparer é null.

Comentários

Esse método tem pelo menos um parâmetro de tipo Expression<TDelegate> cujo argumento de tipo é um dos Func<T,TResult> tipos. Para esses parâmetros, você pode passar uma expressão lambda e ela será compilada para um Expression<TDelegate>.

O GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>) método gera um MethodCallExpression que representa chamar GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>) a si mesmo como um método genérico construído. Em seguida, ele passa o MethodCallExpression CreateQuery<TElement>(Expression) método do IQueryProvider representado pela Provider propriedade do source parâmetro.

O comportamento de consulta que ocorre como resultado da execução de uma árvore de expressão que representa a chamada GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>) depende da implementação do tipo do source parâmetro. O comportamento esperado é que ele agrupa os elementos por source um valor de chave que é obtido invocando keySelector em cada elemento. Os valores de chave são comparados usando comparer. O elementSelector parâmetro é invocado em cada elemento para obter um elemento de resultado.

Aplica-se a

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

Agrupa os elementos de uma sequência de acordo com uma função do seletor de chave especificada e cria um valor de resultado de cada grupo e sua chave.

public:
generic <typename TSource, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IQueryable<TResult> ^ GroupBy(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector, System::Linq::Expressions::Expression<Func<TKey, System::Collections::Generic::IEnumerable<TSource> ^, TResult> ^> ^ resultSelector);
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TSource>,TResult>> resultSelector);
static member GroupBy : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Linq.Expressions.Expression<Func<'Key, seq<'Source>, 'Result>> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TResult) (source As IQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey)), resultSelector As Expression(Of Func(Of TKey, IEnumerable(Of TSource), TResult))) As IQueryable(Of TResult)

Parâmetros de tipo

TSource

O tipo dos elementos de source.

TKey

O tipo da chave retornada pela função representada em keySelector.

TResult

O tipo do valor de resultado retornado por resultSelector.

Parâmetros

source
IQueryable<TSource>

Um IQueryable<T> cujos elementos serão agrupados.

keySelector
Expression<Func<TSource,TKey>>

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

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

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

Retornos

IQueryable<TResult>

Um T:System.Linq.IQueryable`1 que tem um argumento de tipo de TResult e no qual cada elemento representa uma projeção sobre um grupo e sua chave.

Exceções

source, keySelector ou resultSelector é null.

Exemplos

O exemplo de código a seguir demonstra como usar GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<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.AsQueryable().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

Shared 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.AsQueryable().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 with this age: " & result.Count)
        output.AppendLine("Minimum age: " & result.Min)
        output.AppendLine("Maximum age: " & result.Max)
    Next

    ' Display the output.
    MsgBox(output.ToString())

    ' This code produces the following output:

    '  Age group: 8
    '  Number of pets with this age: 1
    '  Minimum age: 8.3
    '  Maximum age: 8.3

    '  Age group: 4
    '  Number of pets with this age: 2
    '  Minimum age: 4.3
    '  Maximum age: 4.9

    '  Age group: 1
    '  Number of pets with this age: 1
    '  Minimum age: 1.5
    '  Maximum age: 1.5
End Sub

Comentários

Esse método tem pelo menos um parâmetro de tipo Expression<TDelegate> cujo argumento de tipo é um dos Func<T,TResult> tipos. Para esses parâmetros, você pode passar uma expressão lambda e ela será compilada para um Expression<TDelegate>.

O GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>) método gera um MethodCallExpression que representa chamar GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>) a si mesmo como um método genérico construído. Em seguida, ele passa o MethodCallExpression CreateQuery<TElement>(Expression) método do IQueryProvider representado pela Provider propriedade do source parâmetro.

O comportamento de consulta que ocorre como resultado da execução de uma árvore de expressão que representa a chamada GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>) depende da implementação do tipo do source parâmetro. O comportamento esperado é que ele agrupa os elementos por source um valor de chave que é obtido invocando keySelector em cada elemento. O resultSelector parâmetro é usado para obter um valor de resultado de cada grupo e sua chave.

Aplica-se a

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

Agrupa os elementos de uma sequência de acordo com uma função do seletor de chave especificada e cria um valor de resultado de cada grupo e 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::Linq::IQueryable<TResult> ^ GroupBy(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector, System::Linq::Expressions::Expression<Func<TKey, System::Collections::Generic::IEnumerable<TSource> ^, TResult> ^> ^ resultSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TSource>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TSource>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);
static member GroupBy : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Linq.Expressions.Expression<Func<'Key, seq<'Source>, 'Result>> * System.Collections.Generic.IEqualityComparer<'Key> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TResult) (source As IQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey)), resultSelector As Expression(Of Func(Of TKey, IEnumerable(Of TSource), TResult)), comparer As IEqualityComparer(Of TKey)) As IQueryable(Of TResult)

Parâmetros de tipo

TSource

O tipo dos elementos de source.

TKey

O tipo da chave retornada pela função representada em keySelector.

TResult

O tipo do valor de resultado retornado por resultSelector.

Parâmetros

source
IQueryable<TSource>

Um IQueryable<T> cujos elementos serão agrupados.

keySelector
Expression<Func<TSource,TKey>>

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

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

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

comparer
IEqualityComparer<TKey>

Um IEqualityComparer<T> para comparar chaves.

Retornos

IQueryable<TResult>

Um T:System.Linq.IQueryable`1 que tem um argumento de tipo de TResult e no qual cada elemento representa uma projeção sobre um grupo e sua chave.

Exceções

source ou keySelector ou resultSelector ou comparer é null.

Comentários

Esse método tem pelo menos um parâmetro de tipo Expression<TDelegate> cujo argumento de tipo é um dos Func<T,TResult> tipos. Para esses parâmetros, você pode passar uma expressão lambda e ela será compilada para um Expression<TDelegate>.

O GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>) método gera um MethodCallExpression que representa chamar GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>) a si mesmo como um método genérico construído. Em seguida, ele passa o MethodCallExpression CreateQuery<TElement>(Expression) método do IQueryProvider representado pela Provider propriedade do source parâmetro.

O comportamento de consulta que ocorre como resultado da execução de uma árvore de expressão que representa a chamada GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>) depende da implementação do tipo do source parâmetro. O comportamento esperado é que ele agrupa os elementos de source valores chave obtidos invocando keySelector cada elemento. O comparer parâmetro é usado para comparar chaves e o resultSelector parâmetro é usado para obter um valor de resultado de cada grupo e sua chave.

Aplica-se a

GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>)

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

public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IQueryable<System::Linq::IGrouping<TKey, TSource> ^> ^ GroupBy(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector);
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TSource>> GroupBy<TSource,TKey> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector);
static member GroupBy : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> -> System.Linq.IQueryable<System.Linq.IGrouping<'Key, 'Source>>
<Extension()>
Public Function GroupBy(Of TSource, TKey) (source As IQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey))) As IQueryable(Of IGrouping(Of TKey, TSource))

Parâmetros de tipo

TSource

O tipo dos elementos de source.

TKey

O tipo da chave retornada pela função representada em keySelector.

Parâmetros

source
IQueryable<TSource>

Um IQueryable<T> cujos elementos serão agrupados.

keySelector
Expression<Func<TSource,TKey>>

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

Retornos

IQueryable<IGrouping<TKey,TSource>>

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

Exceções

source ou keySelector é null.

Exemplos

O exemplo de código a seguir demonstra como usar GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) para agrupar os elementos de uma sequência.

class Pet
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public static void GroupByEx1()
{
    // Create a list of Pet objects.
    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 Pet.Age as the key.
    // Use Pet.Name as the value for each entry.
    var query = pets.AsQueryable().GroupBy(pet => pet.Age);

    // Iterate over each IGrouping in the collection.
    foreach (var ageGroup in query)
    {
        Console.WriteLine("Age group: {0}  Number of pets: {1}", ageGroup.Key, ageGroup.Count());
    }
}

/*
    This code produces the following output:

    Age group: 8  Number of pets: 1
    Age group: 4  Number of pets: 2
    Age group: 1  Number of pets: 1

*/
Structure Pet
    Public Name As String
    Public Age As Integer
End Structure

Shared 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 Pet.Age as the key.
    ' Use Pet.Name as the value for each entry.
    Dim query = pets.AsQueryable().GroupBy(Function(pet) pet.Age)

    Dim output As New System.Text.StringBuilder
    ' Iterate over each IGrouping in the collection.
    For Each ageGroup In query
        output.AppendFormat("Age group: {0}   Number of pets: {1}{2}", ageGroup.Key, ageGroup.Count(), vbCrLf)
    Next

    ' Display the output.
    MsgBox(output.ToString())
End Sub

' This code produces the following output:
'
' Age group: 8   Number of pets: 1
' Age group: 4   Number of pets: 2
' Age group: 1   Number of pets: 1

Comentários

Esse método tem pelo menos um parâmetro de tipo Expression<TDelegate> cujo argumento de tipo é um dos Func<T,TResult> tipos. Para esses parâmetros, você pode passar uma expressão lambda e ela será compilada para um Expression<TDelegate>.

O GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) método gera um MethodCallExpression que representa chamar GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) a si mesmo como um método genérico construído. Em seguida, ele passa o MethodCallExpression CreateQuery<TElement>(Expression) método do IQueryProvider representado pela Provider propriedade do source parâmetro.

O comportamento de consulta que ocorre como resultado da execução de uma árvore de expressão que representa a chamada GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) depende da implementação do tipo do source parâmetro. O comportamento esperado é que ele agrupa os elementos por source um valor de chave que é obtido invocando keySelector em cada elemento.

Aplica-se a

GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>)

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

public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IQueryable<System::Linq::IGrouping<TKey, TSource> ^> ^ GroupBy(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TSource>> GroupBy<TSource,TKey> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TSource>> GroupBy<TSource,TKey> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);
static member GroupBy : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Collections.Generic.IEqualityComparer<'Key> -> System.Linq.IQueryable<System.Linq.IGrouping<'Key, 'Source>>
<Extension()>
Public Function GroupBy(Of TSource, TKey) (source As IQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey)), comparer As IEqualityComparer(Of TKey)) As IQueryable(Of IGrouping(Of TKey, TSource))

Parâmetros de tipo

TSource

O tipo dos elementos de source.

TKey

O tipo da chave retornada pela função representada em keySelector.

Parâmetros

source
IQueryable<TSource>

Um IQueryable<T> cujos elementos serão agrupados.

keySelector
Expression<Func<TSource,TKey>>

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

comparer
IEqualityComparer<TKey>

Um IEqualityComparer<T> para comparar chaves.

Retornos

IQueryable<IGrouping<TKey,TSource>>

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

Exceções

source, keySelector ou comparer é null.

Comentários

Esse método tem pelo menos um parâmetro de tipo Expression<TDelegate> cujo argumento de tipo é um dos Func<T,TResult> tipos. Para esses parâmetros, você pode passar uma expressão lambda e ela será compilada para um Expression<TDelegate>.

O GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>) método gera um MethodCallExpression que representa chamar GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>) a si mesmo como um método genérico construído. Em seguida, ele passa o MethodCallExpression CreateQuery<TElement>(Expression) método do IQueryProvider representado pela Provider propriedade do source parâmetro.

O comportamento de consulta que ocorre como resultado da execução de uma árvore de expressão que representa a chamada GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>) depende da implementação do tipo do source parâmetro. O comportamento esperado é que ele agrupa os elementos por source um valor de chave. O valor da chave é obtido invocando keySelector em cada elemento e os valores de chave são comparados usando comparer.

Aplica-se a