Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método Enumerable.GroupBy<TSource, TKey, TElement>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>)

 

Publicado: noviembre de 2016

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

Espacio de nombres:   System.Linq
Ensamblado:  System.Core (en System.Core.dll)

public static IEnumerable<IGrouping<TKey, TElement>> GroupBy<TSource, TKey, TElement>(
	this IEnumerable<TSource> source,
	Func<TSource, TKey> keySelector,
	Func<TSource, TElement> elementSelector
)

Parámetros

source
Type: System.Collections.Generic.IEnumerable<TSource>

Una IEnumerable<T> cuyos elementos desea agrupar.

keySelector
Type: System.Func<TSource, TKey>

Función para extraer la clave de cada elemento.

elementSelector
Type: System.Func<TSource, TElement>

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

Valor devuelto

Type: System.Collections.Generic.IEnumerable<IGrouping<TKey, TElement>>

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

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

Exception Condition
ArgumentNullException

source o keySelector o elementSelector es null.

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 se enumera el objeto llamando a su GetEnumerator método directamente o mediante foreach en Visual C# o For Each 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, uno para cada clave distinto que se encontró. Un IGrouping<TKey, TElement> es un IEnumerable<T> que también tiene una clave asociada a sus elementos.

El IGrouping<TKey, TElement> objetos se proporcionan en un orden según el orden de los elementos de source que produjo la primera clave de cada IGrouping<TKey, TElement>. Elementos de una agrupación se proporcionan en el orden en que aparecen los elementos que los generan en source.

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

En el ejemplo de código siguiente se muestra cómo utilizar 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
*/

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

IEnumerable<IGrouping<int, string>> query =
    from pet in pets
    group pet.Name by pet.Age;
System_CAPS_noteNota

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

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 3.5
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: