Enumerable.GroupBy Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Agrupa os elementos de uma sequência.
Sobrecargas
GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>) |
Agrupa os elementos de uma sequência de acordo com uma função 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>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>, TResult>, IEqualityComparer<TKey>) |
Agrupa os elementos de uma sequência de acordo com uma função do seletor de chave especificada e cria um valor de resultado de cada grupo e sua chave. Os valores da chave são comparados usando um comparador especificado e os elementos de cada grupo são projetados usando uma função especificada. |
GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) |
Agrupa os elementos de uma sequência de acordo com a função de seletor de chave especificada e projeta os elementos de cada grupo usando uma função especificada. |
GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>) |
Agrupa os elementos de uma sequência de acordo com uma função de seletor de chave. As chaves são comparadas usando um comparador e os elementos de cada grupo são projetados usando uma função especificada. |
GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>) |
Agrupa os elementos de uma sequência de acordo com uma função do seletor de chave especificada e cria um valor de resultado de cada grupo e sua chave. |
GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>, IEqualityComparer<TKey>) |
Agrupa os elementos de uma sequência de acordo com uma função 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>(IEnumerable<TSource>, Func<TSource,TKey>) |
Agrupa os elementos de uma sequência de acordo com uma função de seletor de chave especificada. |
GroupBy<TSource,TKey>(IEnumerable<TSource>, 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>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>)
- Origem:
- Grouping.cs
- Origem:
- Grouping.cs
- Origem:
- Grouping.cs
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::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
O tipo dos elementos de source
.
- TKey
O tipo da chave retornada por keySelector
.
- TElement
O tipo dos elementos em cada IGrouping<TKey,TElement>.
- TResult
O tipo do valor de resultado retornado por resultSelector
.
Parâmetros
- source
- IEnumerable<TSource>
Um IEnumerable<T> cujos elementos serão agrupados.
- keySelector
- Func<TSource,TKey>
Uma função para extrair a chave de cada elemento.
- elementSelector
- Func<TSource,TElement>
Uma função para mapear cada elemento de origem para um elemento em um IGrouping<TKey,TElement>.
- resultSelector
- Func<TKey,IEnumerable<TElement>,TResult>
Uma função para criar um valor de resultado de cada grupo.
Retornos
Uma coleção de elementos do tipo TResult
, em que cada elemento representa uma projeção em 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>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>) para agrupar os elementos projetados de uma sequência e, em seguida, projetar uma sequência de resultados do tipo TResult
.
class Pet
{
public string Name { get; set; }
public double Age { get; set; }
}
public static void GroupByEx4()
{
// Create a list of pets.
List<Pet> petsList =
new List<Pet>{ new Pet { Name="Barley", Age=8.3 },
new Pet { Name="Boots", Age=4.9 },
new Pet { Name="Whiskers", Age=1.5 },
new Pet { Name="Daisy", Age=4.3 } };
// Group Pet.Age values by the Math.Floor of the age.
// Then project an anonymous type from each group
// that consists of the key, the count of the group's
// elements, and the minimum and maximum age in the group.
var query = petsList.GroupBy(
pet => Math.Floor(pet.Age),
pet => pet.Age,
(baseAge, ages) => new
{
Key = baseAge,
Count = ages.Count(),
Min = ages.Min(),
Max = ages.Max()
});
// Iterate over each anonymous type.
foreach (var result in query)
{
Console.WriteLine("\nAge group: " + result.Key);
Console.WriteLine("Number of pets in this age group: " + result.Count);
Console.WriteLine("Minimum age: " + result.Min);
Console.WriteLine("Maximum age: " + result.Max);
}
/* This code produces the following output:
Age group: 8
Number of pets in this age group: 1
Minimum age: 8.3
Maximum age: 8.3
Age group: 4
Number of pets in this age group: 2
Minimum age: 4.3
Maximum age: 4.9
Age group: 1
Number of pets in this age group: 1
Minimum age: 1.5
Maximum age: 1.5
*/
}
Structure Pet
Public Name As String
Public Age As Double
End Structure
Public Sub GroupByEx4()
' Create a list of pets.
Dim petsList As New List(Of Pet)(New Pet() _
{New Pet With {.Name = "Barley", .Age = 8.3},
New Pet With {.Name = "Boots", .Age = 4.9},
New Pet With {.Name = "Whiskers", .Age = 1.5},
New Pet With {.Name = "Daisy", .Age = 4.3}})
' Group Pet.Age values by the Math.Floor of the age.
' Then project an anonymous type from each group
' that consists of the key, the count of the group's
' elements, and the minimum and maximum age in the group.
Dim query = petsList.GroupBy(
Function(pet) Math.Floor(pet.Age),
Function(pet) pet.Age,
Function(baseAge, ages) New With
{.Key = baseAge,
.Count = ages.Count(),
.Min = ages.Min(),
.Max = ages.Max()}
)
Dim output As New System.Text.StringBuilder
' Iterate over each anonymous type.
For Each result In query
output.AppendLine(vbCrLf & "Age group: " & result.Key)
output.AppendLine("Number of pets in this age group: " & result.Count)
output.AppendLine("Minimum age: " & result.Min)
output.AppendLine("Maximum age: " & result.Max)
Next
' Display the output.
Console.WriteLine(output.ToString)
End Sub
' This code produces the following output:
' Age group: 8
' Number of pets in this age group: 1
' Minimum age: 8.3
' Maximum age: 8.3
'
' Age group: 4
' Number of pets in this age group: 2
' Minimum age: 4.3
' Maximum age: 4.9
'
' Age group: 1
' Number of pets in this age group: 1
' Minimum age: 1.5
' Maximum age: 1.5
Comentários
Na sintaxe da expressão de consulta, uma group by
cláusula (C#) ou Group By Into
(Visual Basic) é convertida em uma invocação de GroupBy.
Confira também
Aplica-se a
GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>, TResult>, IEqualityComparer<TKey>)
- Origem:
- Grouping.cs
- Origem:
- Grouping.cs
- Origem:
- Grouping.cs
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 valores da chave são comparados usando um comparador especificado e os elementos de cada grupo são projetados usando uma função especificada.
public:
generic <typename TSource, typename TKey, typename TElement, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, Func<TSource, TElement> ^ elementSelector, Func<TKey, System::Collections::Generic::IEnumerable<TElement> ^, TResult> ^ resultSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Collections.Generic.IEnumerable<TResult> GroupBy<TSource,TKey,TElement,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TSource,TElement> elementSelector, Func<TKey,System.Collections.Generic.IEnumerable<TElement>,TResult> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
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
O tipo dos elementos de source
.
- TKey
O tipo da chave retornada por keySelector
.
- TElement
O tipo dos elementos em cada IGrouping<TKey,TElement>.
- TResult
O tipo do valor de resultado retornado por resultSelector
.
Parâmetros
- source
- IEnumerable<TSource>
Um IEnumerable<T> cujos elementos serão agrupados.
- keySelector
- Func<TSource,TKey>
Uma função para extrair a chave de cada elemento.
- elementSelector
- Func<TSource,TElement>
Uma função para mapear cada elemento de origem para um elemento em um IGrouping<TKey,TElement>.
- resultSelector
- Func<TKey,IEnumerable<TElement>,TResult>
Uma função para criar um valor de resultado de cada grupo.
- comparer
- IEqualityComparer<TKey>
Um IEqualityComparer<T> com o qual as chaves serão comparadas.
Retornos
Uma coleção de elementos do tipo TResult
, em que cada elemento representa uma projeção em um grupo e sua chave.
Exceções
source
ou keySelector
ou elementSelector
ou resultSelector
é null
.
Confira também
Aplica-se a
GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)
- Origem:
- Grouping.cs
- Origem:
- Grouping.cs
- Origem:
- Grouping.cs
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::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
O tipo dos elementos de source
.
- TKey
O tipo da chave retornada por keySelector
.
- TElement
O tipo dos elementos no IGrouping<TKey,TElement>.
Parâmetros
- source
- IEnumerable<TSource>
Um IEnumerable<T> cujos elementos serão agrupados.
- keySelector
- Func<TSource,TKey>
Uma função para extrair a chave de cada elemento.
- elementSelector
- Func<TSource,TElement>
Uma função para mapear cada elemento de origem para um elemento no IGrouping<TKey,TElement>.
Retornos
Um IEnumerable<IGrouping<TKey, TElement>>
em C# ou IEnumerable(Of IGrouping(Of TKey, TElement))
no Visual Basic em que cada IGrouping<TKey,TElement> objeto contém uma coleção de objetos do 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>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) para agrupar os elementos de uma sequência.
class Pet
{
public string Name { get; set; }
public int Age { get; set; }
}
// Uses method-based query syntax.
public static void GroupByEx1()
{
// Create a list of pets.
List<Pet> pets =
new List<Pet>{ new Pet { Name="Barley", Age=8 },
new Pet { Name="Boots", Age=4 },
new Pet { Name="Whiskers", Age=1 },
new Pet { Name="Daisy", Age=4 } };
// Group the pets using Age as the key value
// and selecting only the pet's Name for each value.
IEnumerable<IGrouping<int, string>> query =
pets.GroupBy(pet => pet.Age, pet => pet.Name);
// Iterate over each IGrouping in the collection.
foreach (IGrouping<int, string> petGroup in query)
{
// Print the key value of the IGrouping.
Console.WriteLine(petGroup.Key);
// Iterate over each value in the
// IGrouping and print the value.
foreach (string name in petGroup)
Console.WriteLine(" {0}", name);
}
}
/*
This code produces the following output:
8
Barley
4
Boots
Daisy
1
Whiskers
*/
Structure Pet
Public Name As String
Public Age As Integer
End Structure
Sub GroupByEx1()
'Create a list of Pet objects.
Dim pets As New List(Of Pet)(New Pet() _
{New Pet With {.Name = "Barley", .Age = 8},
New Pet With {.Name = "Boots", .Age = 4},
New Pet With {.Name = "Whiskers", .Age = 1},
New Pet With {.Name = "Daisy", .Age = 4}})
' Group the pets using Age as the key
' and selecting only the pet's Name for each value.
Dim query As IEnumerable(Of IGrouping(Of Integer, String)) =
pets.GroupBy(Function(pet) pet.Age,
Function(pet) pet.Name)
Dim output As New System.Text.StringBuilder
' Iterate over each IGrouping in the collection.
For Each petGroup As IGrouping(Of Integer, String) In query
' Print the key value of the IGrouping.
output.AppendLine(petGroup.Key)
' Iterate over each value in the IGrouping and print the value.
For Each name As String In petGroup
output.AppendLine(" " & name)
Next
Next
' Display the output.
Console.WriteLine(output.ToString)
End Sub
' This code produces the following output:
'
' 8
' Barley
' 4
' Boots
' Daisy
' 1
' Whiskers
Na sintaxe da expressão de consulta, uma group by
cláusula (C#) ou Group By Into
(Visual Basic) é convertida em uma invocação de GroupBy. A tradução da expressão de consulta no exemplo a seguir é equivalente à consulta no exemplo acima.
IEnumerable<IGrouping<int, string>> query =
from pet in pets
group pet.Name by pet.Age;
Dim query =
From pet In pets
Group pet.Name By Age = pet.Age Into ageGroup = Group
Observação
Em uma expressão de consulta C# ou Visual Basic, as expressões de seleção de elemento e chave ocorrem na ordem inversa de suas posições de argumento em uma chamada para o GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) método .
Comentários
Esse método é implementado usando a execução adiada. O valor retornado imediato é um objeto que armazena todas as informações necessárias para executar a ação. A consulta representada por esse método não é executada até que o objeto seja enumerado chamando seu GetEnumerator
método diretamente ou usando foreach
em C# ou For Each
no Visual Basic.
O GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) método retorna uma coleção de IGrouping<TKey,TElement> objetos, um para cada chave distinta que foi encontrada. Um IGrouping<TKey,TElement> é um IEnumerable<T> que também tem uma chave associada aos seus elementos.
Os IGrouping<TKey,TElement> objetos são produzidos em uma ordem com base na ordem dos elementos no source
que produziu a primeira chave de cada IGrouping<TKey,TElement>. Os elementos em um agrupamento são produzidos na ordem em que os elementos que os produziram aparecem em source
.
O comparador Default de igualdade padrão é usado para comparar chaves.
Confira também
Aplica-se a
GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)
- Origem:
- Grouping.cs
- Origem:
- Grouping.cs
- Origem:
- Grouping.cs
Agrupa os elementos de uma sequência de acordo com uma função de seletor de chave. As chaves são comparadas usando um comparador e os elementos de cada grupo são projetados usando uma função especificada.
public:
generic <typename TSource, typename TKey, typename TElement>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<System::Linq::IGrouping<TKey, TElement> ^> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, Func<TSource, TElement> ^ elementSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Collections.Generic.IEnumerable<System.Linq.IGrouping<TKey,TElement>> GroupBy<TSource,TKey,TElement> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TSource,TElement> elementSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
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
O tipo dos elementos de source
.
- TKey
O tipo da chave retornada por keySelector
.
- TElement
O tipo dos elementos no IGrouping<TKey,TElement>.
Parâmetros
- source
- IEnumerable<TSource>
Um IEnumerable<T> cujos elementos serão agrupados.
- keySelector
- Func<TSource,TKey>
Uma função para extrair a chave de cada elemento.
- elementSelector
- Func<TSource,TElement>
Uma função para mapear cada elemento de origem para um elemento em um IGrouping<TKey,TElement>.
- comparer
- IEqualityComparer<TKey>
Um IEqualityComparer<T> para comparar chaves.
Retornos
Um IEnumerable<IGrouping<TKey, TElement>>
em C# ou IEnumerable(Of IGrouping(Of TKey, TElement))
no Visual Basic em que cada IGrouping<TKey,TElement> objeto contém uma coleção de objetos do tipo TElement
e uma chave.
Exceções
source
, keySelector
ou elementSelector
é null
.
Comentários
Esse método é implementado usando a execução adiada. O valor retornado imediato é um objeto que armazena todas as informações necessárias para executar a ação. A consulta representada por esse método não é executada até que o objeto seja enumerado chamando seu GetEnumerator
método diretamente ou usando foreach
em C# ou For Each
no Visual Basic.
Observação
Para obter exemplos de GroupBy
, consulte os seguintes artigos:
- 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>)
O GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>) método retorna uma coleção de IGrouping<TKey,TElement> objetos, um para cada chave distinta que foi encontrada. Um IGrouping<TKey,TElement> é um IEnumerable<T> que também tem uma chave associada aos seus elementos.
Os IGrouping<TKey,TElement> objetos são produzidos em uma ordem com base na ordem dos elementos no source
que produziu a primeira chave de cada IGrouping<TKey,TElement>. Os elementos em um agrupamento são produzidos na ordem em que os elementos que os produziram aparecem em source
.
Se comparer
for null
, o comparador Default de igualdade padrão será usado para comparar chaves.
Se duas chaves forem consideradas iguais de acordo comparer
com , a primeira chave será escolhida como a chave para esse agrupamento.
Na sintaxe da expressão de consulta, uma group by
cláusula (C#) ou Group By Into
(Visual Basic) é convertida em uma invocação de GroupBy. Para obter mais informações e exemplos de uso, consulte cláusula group e Cláusula Group By.
Confira também
Aplica-se a
GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)
- Origem:
- Grouping.cs
- Origem:
- Grouping.cs
- Origem:
- Grouping.cs
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::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
O tipo dos elementos de source
.
- TKey
O tipo da chave retornada por keySelector
.
- TResult
O tipo do valor de resultado retornado por resultSelector
.
Parâmetros
- source
- IEnumerable<TSource>
Um IEnumerable<T> cujos elementos serão agrupados.
- keySelector
- Func<TSource,TKey>
Uma função para extrair a chave de cada elemento.
- resultSelector
- Func<TKey,IEnumerable<TSource>,TResult>
Uma função para criar um valor de resultado de cada grupo.
Retornos
Uma coleção de elementos do tipo TResult
, em que cada elemento representa uma projeção em 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>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>) para agrupar os elementos de uma sequência e projetar uma sequência de resultados do tipo TResult
.
class Pet
{
public string Name { get; set; }
public double Age { get; set; }
}
public static void GroupByEx3()
{
// Create a list of pets.
List<Pet> petsList =
new List<Pet>{ new Pet { Name="Barley", Age=8.3 },
new Pet { Name="Boots", Age=4.9 },
new Pet { Name="Whiskers", Age=1.5 },
new Pet { Name="Daisy", Age=4.3 } };
// Group Pet objects by the Math.Floor of their age.
// Then project an anonymous type from each group
// that consists of the key, the count of the group's
// elements, and the minimum and maximum age in the group.
var query = petsList.GroupBy(
pet => Math.Floor(pet.Age),
(age, pets) => new
{
Key = age,
Count = pets.Count(),
Min = pets.Min(pet => pet.Age),
Max = pets.Max(pet => pet.Age)
});
// Iterate over each anonymous type.
foreach (var result in query)
{
Console.WriteLine("\nAge group: " + result.Key);
Console.WriteLine("Number of pets in this age group: " + result.Count);
Console.WriteLine("Minimum age: " + result.Min);
Console.WriteLine("Maximum age: " + result.Max);
}
/* This code produces the following output:
Age group: 8
Number of pets in this age group: 1
Minimum age: 8.3
Maximum age: 8.3
Age group: 4
Number of pets in this age group: 2
Minimum age: 4.3
Maximum age: 4.9
Age group: 1
Number of pets in this age group: 1
Minimum age: 1.5
Maximum age: 1.5
*/
}
Structure Pet
Public Name As String
Public Age As Double
End Structure
Public Sub GroupByEx3()
' Create a list of pets.
Dim petsList As New List(Of Pet)(New Pet() _
{New Pet With {.Name = "Barley", .Age = 8.3},
New Pet With {.Name = "Boots", .Age = 4.9},
New Pet With {.Name = "Whiskers", .Age = 1.5},
New Pet With {.Name = "Daisy", .Age = 4.3}})
' Group Pet objects by the Math.Floor of their age.
' Then project an anonymous type from each group
' that consists of the key, the count of the group's
' elements, and the minimum and maximum age in the group.
Dim query = petsList.GroupBy(
Function(pet) Math.Floor(pet.Age),
Function(age, pets) New With
{.Key = age,
.Count = pets.Count(),
.Min = pets.Min(Function(pet) pet.Age),
.Max = pets.Max(Function(Pet) Pet.Age)}
)
Dim output As New System.Text.StringBuilder
' Iterate over each anonymous type.
For Each result In query
output.AppendLine(vbCrLf & "Age group: " & result.Key)
output.AppendLine("Number of pets in this age group: " & result.Count)
output.AppendLine("Minimum age: " & result.Min)
output.AppendLine("Maximum age: " & result.Max)
Next
' Display the output.
Console.WriteLine(output.ToString)
End Sub
' This code produces the following output:
' Age group: 8
' Number of pets in this age group: 1
' Minimum age: 8.3
' Maximum age: 8.3
'
' Age group: 4
' Number of pets in this age group: 2
' Minimum age: 4.3
' Maximum age: 4.9
'
' Age group: 1
' Number of pets in this age group: 1
' Minimum age: 1.5
' Maximum age: 1.5
Comentários
Na sintaxe da expressão de consulta, uma group by
cláusula (C#) ou Group By Into
(Visual Basic) é convertida em uma invocação de GroupBy.
Confira também
Aplica-se a
GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>, IEqualityComparer<TKey>)
- Origem:
- Grouping.cs
- Origem:
- Grouping.cs
- Origem:
- Grouping.cs
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::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);
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
O tipo dos elementos de source
.
- TKey
O tipo da chave retornada por keySelector
.
- TResult
O tipo do valor de resultado retornado por resultSelector
.
Parâmetros
- source
- IEnumerable<TSource>
Um IEnumerable<T> cujos elementos serão agrupados.
- keySelector
- Func<TSource,TKey>
Uma função para extrair a chave de cada elemento.
- resultSelector
- Func<TKey,IEnumerable<TSource>,TResult>
Uma função para criar um valor de resultado de cada grupo.
- comparer
- IEqualityComparer<TKey>
Um IEqualityComparer<T> com o qual as chaves serão comparadas.
Retornos
Uma coleção de elementos do tipo TResult
, em que cada elemento representa uma projeção em um grupo e sua chave.
Exceções
source
, keySelector
ou resultSelector
é null
.
Confira também
Aplica-se a
GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)
- Origem:
- Grouping.cs
- Origem:
- Grouping.cs
- Origem:
- Grouping.cs
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::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
O tipo dos elementos de source
.
- TKey
O tipo da chave retornada por keySelector
.
Parâmetros
- source
- IEnumerable<TSource>
Um IEnumerable<T> cujos elementos serão agrupados.
- keySelector
- Func<TSource,TKey>
Uma função para extrair a chave de cada elemento.
Retornos
Um IEnumerable<IGrouping<TKey, TSource>>
em C# ou IEnumerable(Of IGrouping(Of TKey, TSource))
no Visual Basic em que cada IGrouping<TKey,TElement> objeto contém uma sequência de objetos e uma chave.
Exceções
source
ou keySelector
é null
.
Comentários
Esse método é implementado usando a execução adiada. O valor retornado imediato é um objeto que armazena todas as informações necessárias para executar a ação. A consulta representada por esse método não é executada até que o objeto seja enumerado chamando seu GetEnumerator
método diretamente ou usando foreach
em C# ou For Each
no Visual Basic.
Observação
Para obter exemplos de GroupBy
, consulte os seguintes artigos:
- 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>)
O GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) método retorna uma coleção de IGrouping<TKey,TElement> objetos, um para cada chave distinta que foi encontrada. Um IGrouping<TKey,TElement> é um IEnumerable<T> que também tem uma chave associada aos seus elementos.
Os IGrouping<TKey,TElement> objetos são produzidos em uma ordem com base na ordem dos elementos no source
que produziu a primeira chave de cada IGrouping<TKey,TElement>. Os elementos em um agrupamento são gerados na ordem em que aparecem em source
.
O comparador Default de igualdade padrão é usado para comparar chaves.
Na sintaxe da expressão de consulta, uma group by
cláusula (C#) ou Group By Into
(Visual Basic) é convertida em uma invocação de GroupBy. Para obter mais informações e exemplos de uso, consulte cláusula group e Cláusula Group By.
Confira também
Aplica-se a
GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)
- Origem:
- Grouping.cs
- Origem:
- Grouping.cs
- Origem:
- Grouping.cs
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::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);
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
O tipo dos elementos de source
.
- TKey
O tipo da chave retornada por keySelector
.
Parâmetros
- source
- IEnumerable<TSource>
Um IEnumerable<T> cujos elementos serão agrupados.
- keySelector
- Func<TSource,TKey>
Uma função para extrair a chave de cada elemento.
- comparer
- IEqualityComparer<TKey>
Um IEqualityComparer<T> para comparar chaves.
Retornos
Um IEnumerable<IGrouping<TKey, TSource>>
em C# ou IEnumerable(Of IGrouping(Of TKey, TSource))
no Visual Basic em que cada IGrouping<TKey,TElement> objeto contém uma coleção de objetos e uma chave.
Exceções
source
ou keySelector
é null
.
Comentários
Esse método é implementado usando a execução adiada. O valor retornado imediato é um objeto que armazena todas as informações necessárias para executar a ação. A consulta representada por esse método não é executada até que o objeto seja enumerado chamando seu GetEnumerator
método diretamente ou usando foreach
em C# ou For Each
no Visual Basic.
Observação
Para obter exemplos de GroupBy
, consulte os seguintes artigos:
- 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>)
O GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) método retorna uma coleção de IGrouping<TKey,TElement> objetos, um para cada chave distinta que foi encontrada. Um IGrouping<TKey,TElement> é um IEnumerable<T> que também tem uma chave associada aos seus elementos.
Os IGrouping<TKey,TElement> objetos são produzidos em uma ordem com base na ordem dos elementos no source
que produziu a primeira chave de cada IGrouping<TKey,TElement>. Os elementos em um agrupamento são gerados na ordem em que aparecem em source
.
Se comparer
for null
, o comparador Default de igualdade padrão será usado para comparar chaves.
Se duas chaves forem consideradas iguais de acordo comparer
com , a primeira chave será escolhida como a chave para esse agrupamento.
Na sintaxe da expressão de consulta, uma group by
cláusula (C#) ou Group By Into
(Visual Basic) é convertida em uma invocação de GroupBy. Para obter mais informações e exemplos de uso, consulte cláusula group e Cláusula Group By.