Enumerable.GroupBy Método

Definición

Agrupa los elementos de una secuencia.

Sobrecargas

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

Agrupa los elementos de una secuencia según una función de selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave. Los elementos de cada grupo se proyectan mediante una función especificada.

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

Agrupa los elementos de una secuencia según una función de selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave. Los valores de clave se comparan mediante un comparador especificado y los elementos de cada grupo se proyectan mediante una función especificada.

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

Agrupa los elementos de una secuencia según una función de selector de claves especificada y proyecta los elementos de cada grupo mediante una función especificada.

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

Agrupa los elementos de una secuencia según una función del selector de claves. Las claves se comparan mediante un comparador y los elementos de cada grupo se proyectan mediante una función especificada.

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

Agrupa los elementos de una secuencia según una función de selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave.

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

Agrupa los elementos de una secuencia según una función de selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave. Las claves se comparan mediante un comparador especificado.

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

Agrupa los elementos de una secuencia según una función de selector de claves especificada.

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

Agrupa los elementos de una secuencia según una función de selector de claves especificada y compara las claves mediante un comparador especificado.

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

Agrupa los elementos de una secuencia según una función de selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave. Los elementos de cada grupo se proyectan mediante una función 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

TSource

Tipo de los elementos de source.

TKey

Tipo de la clave devuelta por keySelector.

TElement

Tipo de los elementos de cada IGrouping<TKey,TElement>.

TResult

Tipo del valor de resultado devuelto por resultSelector.

Parámetros

source
IEnumerable<TSource>

cuyos IEnumerable<T> elementos se van a agrupar.

keySelector
Func<TSource,TKey>

Función para extraer la clave de cada elemento.

elementSelector
Func<TSource,TElement>

Función para asignar cada elemento de origen a un elemento de .IGrouping<TKey,TElement>

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

Función para crear un valor de resultado de cada grupo.

Devoluciones

IEnumerable<TResult>

Colección de elementos de tipo TResult donde cada elemento representa una proyección sobre un grupo y su clave.

Excepciones

source o keySelector o elementSelectorresultSelector es null.

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>) para agrupar los elementos proyectados de una secuencia y, a continuación, proyectar una secuencia de resultados de 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

Comentarios

En la sintaxis de expresión de consulta, una cláusula group by (C#) o Group By Into (Visual Basic) se traduce en una invocación de GroupBy.

Consulte también

Se aplica a

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

Agrupa los elementos de una secuencia según una función de selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave. Los valores de clave se comparan mediante un comparador especificado y los elementos de cada grupo se proyectan mediante una función 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

TSource

Tipo de los elementos de source.

TKey

Tipo de la clave devuelta por keySelector.

TElement

Tipo de los elementos de cada IGrouping<TKey,TElement>.

TResult

Tipo del valor de resultado devuelto por resultSelector.

Parámetros

source
IEnumerable<TSource>

cuyos IEnumerable<T> elementos se van a agrupar.

keySelector
Func<TSource,TKey>

Función para extraer la clave de cada elemento.

elementSelector
Func<TSource,TElement>

Función para asignar cada elemento de origen a un elemento de .IGrouping<TKey,TElement>

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

Función para crear un valor de resultado de cada grupo.

comparer
IEqualityComparer<TKey>

que IEqualityComparer<T> se va a comparar las claves con.

Devoluciones

IEnumerable<TResult>

Colección de elementos de tipo TResult donde cada elemento representa una proyección sobre un grupo y su clave.

Excepciones

source o keySelector o elementSelectorresultSelector es null.

Consulte también

Se aplica a

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

Agrupa los elementos de una secuencia según una función de selector de claves especificada y proyecta los elementos de cada grupo mediante una función 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

TSource

Tipo de los elementos de source.

TKey

Tipo de la clave devuelta por keySelector.

TElement

Tipo de los elementos de .IGrouping<TKey,TElement>

Parámetros

source
IEnumerable<TSource>

cuyos IEnumerable<T> elementos se van a agrupar.

keySelector
Func<TSource,TKey>

Función para extraer la clave de cada elemento.

elementSelector
Func<TSource,TElement>

Función para asignar cada elemento de origen a un elemento de .IGrouping<TKey,TElement>

Devoluciones

IEnumerable<IGrouping<TKey,TElement>>

Un IEnumerable<IGrouping<TKey, TElement>> en C# o IEnumerable(Of IGrouping(Of TKey, TElement)) en Visual Basic donde cada objeto IGrouping<TKey,TElement> contiene una colección de objetos de tipo TElement y una clave.

Excepciones

source o keySelector es elementSelectornull.

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) para agrupar los elementos de una secuencia.

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

En la sintaxis de expresión de consulta, una cláusula group by (C#) o Group By Into (Visual Basic) se traduce en una invocación de GroupBy. La traducción de la expresión de consulta en el ejemplo siguiente es equivalente a la consulta del ejemplo anterior.

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

En una expresión de consulta de C# o Visual Basic, las expresiones de selección de elementos y claves se producen en el orden inverso de sus posiciones de argumento en una llamada al método GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>).

Comentarios

Este método se implementa mediante la ejecución diferida. El valor devuelto inmediato es un objeto que almacena toda la información necesaria para realizar la acción. La consulta representada por este método no se ejecuta hasta que el objeto se enumera llamando directamente a su método /> en C# o en Visual Basic.

El GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) método devuelve una colección de IGrouping<TKey,TElement> objetos, una para cada clave distinta que se encontró. es IGrouping<TKey,TElement> un que IEnumerable<T> también tiene una clave asociada a sus elementos.

Los IGrouping<TKey,TElement> objetos se producen en un orden basado en el orden de los elementos de source que generaron la primera clave de cada IGrouping<TKey,TElement>. Los elementos de una agrupación se producen en el orden en que los elementos que los generaron aparecen en source.

El comparador Default de igualdad predeterminado se usa para comparar claves.

Consulte también

Se aplica a

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

Agrupa los elementos de una secuencia según una función del selector de claves. Las claves se comparan mediante un comparador y los elementos de cada grupo se proyectan mediante una función 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

TSource

Tipo de los elementos de source.

TKey

Tipo de la clave devuelta por keySelector.

TElement

Tipo de los elementos de .IGrouping<TKey,TElement>

Parámetros

source
IEnumerable<TSource>

cuyos IEnumerable<T> elementos se van a agrupar.

keySelector
Func<TSource,TKey>

Función para extraer la clave de cada elemento.

elementSelector
Func<TSource,TElement>

Función para asignar cada elemento de origen a un elemento de .IGrouping<TKey,TElement>

comparer
IEqualityComparer<TKey>

que IEqualityComparer<T> se va a comparar las claves.

Devoluciones

IEnumerable<IGrouping<TKey,TElement>>

Un IEnumerable<IGrouping<TKey, TElement>> en C# o IEnumerable(Of IGrouping(Of TKey, TElement)) en Visual Basic donde cada objeto IGrouping<TKey,TElement> contiene una colección de objetos de tipo TElement y una clave.

Excepciones

source o keySelector es elementSelectornull.

Comentarios

Este método se implementa mediante la ejecución diferida. El valor devuelto inmediato es un objeto que almacena toda la información necesaria para realizar la acción. La consulta representada por este método no se ejecuta hasta que el objeto se enumera llamando directamente a su método /> en C# o en Visual Basic.

El GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>) método devuelve una colección de IGrouping<TKey,TElement> objetos, una para cada clave distinta que se encontró. es IGrouping<TKey,TElement> un que IEnumerable<T> también tiene una clave asociada a sus elementos.

Los IGrouping<TKey,TElement> objetos se producen en un orden basado en el orden de los elementos de source que generaron la primera clave de cada IGrouping<TKey,TElement>. Los elementos de una agrupación se producen en el orden en que los elementos que los generaron aparecen en source.

Si comparer es null, el comparador Default de igualdad predeterminado se usa para comparar claves.

Si dos claves se consideran iguales según comparer, la primera clave se elige como clave para esa agrupación.

En la sintaxis de expresión de consulta, una cláusula group by (C#) o Group By Into (Visual Basic) se traduce en una invocación de GroupBy. Para obtener más información y ejemplos de uso, vea cláusula group y Group By Clause.

Consulte también

Se aplica a

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

Agrupa los elementos de una secuencia según una función de selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave.

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

TSource

Tipo de los elementos de source.

TKey

Tipo de la clave devuelta por keySelector.

TResult

Tipo del valor de resultado devuelto por resultSelector.

Parámetros

source
IEnumerable<TSource>

cuyos IEnumerable<T> elementos se van a agrupar.

keySelector
Func<TSource,TKey>

Función para extraer la clave de cada elemento.

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

Función para crear un valor de resultado de cada grupo.

Devoluciones

IEnumerable<TResult>

Colección de elementos de tipo TResult donde cada elemento representa una proyección sobre un grupo y su clave.

Excepciones

source o keySelector es resultSelectornull.

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>) para agrupar los elementos de una secuencia y proyectar una secuencia de resultados de 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

Comentarios

En la sintaxis de expresión de consulta, una cláusula group by (C#) o Group By Into (Visual Basic) se traduce en una invocación de GroupBy.

Consulte también

Se aplica a

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

Agrupa los elementos de una secuencia según una función de selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave. Las claves se comparan mediante un 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

TSource

Tipo de los elementos de source.

TKey

Tipo de la clave devuelta por keySelector.

TResult

Tipo del valor de resultado devuelto por resultSelector.

Parámetros

source
IEnumerable<TSource>

cuyos IEnumerable<T> elementos se van a agrupar.

keySelector
Func<TSource,TKey>

Función para extraer la clave de cada elemento.

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

Función para crear un valor de resultado de cada grupo.

comparer
IEqualityComparer<TKey>

que IEqualityComparer<T> se va a comparar las claves con.

Devoluciones

IEnumerable<TResult>

Colección de elementos de tipo TResult donde cada elemento representa una proyección sobre un grupo y su clave.

Excepciones

source o keySelector es resultSelectornull.

Consulte también

Se aplica a

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

Agrupa los elementos de una secuencia según una función de selector de claves 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

TSource

Tipo de los elementos de source.

TKey

Tipo de la clave devuelta por keySelector.

Parámetros

source
IEnumerable<TSource>

cuyos IEnumerable<T> elementos se van a agrupar.

keySelector
Func<TSource,TKey>

Función para extraer la clave de cada elemento.

Devoluciones

IEnumerable<IGrouping<TKey,TSource>>

en IEnumerable<IGrouping<TKey, TSource>> C# o IEnumerable(Of IGrouping(Of TKey, TSource)) en Visual Basic, donde cada IGrouping<TKey,TElement> objeto contiene una secuencia de objetos y una clave.

Excepciones

source o keySelector es null.

Comentarios

Este método se implementa mediante la ejecución diferida. El valor devuelto inmediato es un objeto que almacena toda la información necesaria para realizar la acción. La consulta representada por este método no se ejecuta hasta que el objeto se enumera llamando directamente a su método /> en C# o en Visual Basic.

El GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) método devuelve una colección de IGrouping<TKey,TElement> objetos, una para cada clave distinta que se encontró. es IGrouping<TKey,TElement> un que IEnumerable<T> también tiene una clave asociada a sus elementos.

Los IGrouping<TKey,TElement> objetos se producen en un orden basado en el orden de los elementos de source que generaron la primera clave de cada IGrouping<TKey,TElement>. Los elementos de una agrupación se producen en el orden en que aparecen en source.

El comparador Default de igualdad predeterminado se usa para comparar claves.

En la sintaxis de expresión de consulta, una cláusula group by (C#) o Group By Into (Visual Basic) se traduce en una invocación de GroupBy. Para obtener más información y ejemplos de uso, vea cláusula group y Group By Clause.

Consulte también

Se aplica a

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

Agrupa los elementos de una secuencia según una función de selector de claves especificada y compara las claves mediante un 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

TSource

Tipo de los elementos de source.

TKey

Tipo de la clave devuelta por keySelector.

Parámetros

source
IEnumerable<TSource>

cuyos IEnumerable<T> elementos se van a agrupar.

keySelector
Func<TSource,TKey>

Función para extraer la clave de cada elemento.

comparer
IEqualityComparer<TKey>

que IEqualityComparer<T> se va a comparar las claves.

Devoluciones

IEnumerable<IGrouping<TKey,TSource>>

Un IEnumerable<IGrouping<TKey, TSource>> en C# o IEnumerable(Of IGrouping(Of TKey, TSource)) en Visual Basic donde cada objeto IGrouping<TKey,TElement> contiene una colección de objetos y una clave.

Excepciones

source o keySelector es null.

Comentarios

Este método se implementa mediante la ejecución diferida. El valor devuelto inmediato es un objeto que almacena toda la información necesaria para realizar la acción. La consulta representada por este método no se ejecuta hasta que el objeto se enumera llamando directamente a su método /> en C# o en Visual Basic.

El GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) método devuelve una colección de IGrouping<TKey,TElement> objetos, una para cada clave distinta que se encontró. es IGrouping<TKey,TElement> un que IEnumerable<T> también tiene una clave asociada a sus elementos.

Los IGrouping<TKey,TElement> objetos se producen en un orden basado en el orden de los elementos de source que generaron la primera clave de cada IGrouping<TKey,TElement>. Los elementos de una agrupación se producen en el orden en que aparecen en source.

Si comparer es null, el comparador Default de igualdad predeterminado se usa para comparar claves.

Si dos claves se consideran iguales según comparer, la primera clave se elige como clave para esa agrupación.

En la sintaxis de expresión de consulta, una cláusula group by (C#) o Group By Into (Visual Basic) se traduce en una invocación de GroupBy. Para obtener más información y ejemplos de uso, vea cláusula group y Group By Clause.

Consulte también

Se aplica a