Enumerable.GroupBy Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
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
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
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 />
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
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 />
Note
Para obtener ejemplos de GroupBy, consulte los siguientes artículos:
- GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)
- GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)
- GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>)
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
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
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
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 />
Note
Para obtener ejemplos de GroupBy, consulte los siguientes artículos:
- GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)
- GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)
- GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>)
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
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 />
Note
Para obtener ejemplos de GroupBy, consulte los siguientes artículos:
- GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)
- GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)
- GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>)
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.