GroupBy(TSource, TKey, TResult) Método (IQueryable(TSource), Expression(Func(TSource, TKey)), Expression(Func(TKey, IEnumerable(TSource), TResult)))
Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Método Queryable.GroupBy<TSource, TKey, TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TKey, IEnumerable<TSource>, TResult>>)

 

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

Namespace:   System.Linq
Assembly:  System.Core (em System.Core.dll)

public static IQueryable<TResult> GroupBy<TSource, TKey, TResult>(
	this IQueryable<TSource> source,
	Expression<Func<TSource, TKey>> keySelector,
	Expression<Func<TKey, IEnumerable<TSource>, TResult>> resultSelector
)

Parâmetros

source

Um IQueryable<T> cujos elementos para agrupar.

keySelector

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

resultSelector

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

Valor de retorno

Type: System.Linq.IQueryable<TResult>

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

Parâmetros de tipo

TSource

O tipo dos elementos de source.

TKey

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

TResult

O tipo do valor do resultado retornado por resultSelector.

Exception Condition
ArgumentNullException

sourceor keySelector or resultSelector is null.

Este método tem pelo menos um parâmetro do tipo Expression<TDelegate> argumento cujo tipo é um do Func<T, TResult> tipos.Para esses parâmetros, você pode passar em uma expressão lambda e ele será ser compilado para um Expression<TDelegate>.

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

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

O exemplo de código a seguir demonstra como usar GroupBy<TSource, TKey, TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TKey, IEnumerable<TSource>, TResult>>) para agrupar os elementos de uma seqüência e uma seqüência de resultados do tipo de projeto TResult.

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

public static void GroupByEx3()
{
    // Create a list of pets.
    List<Pet> petsList =
        new List<Pet>{ new Pet { Name="Barley", Age=8.3 },
                       new Pet { Name="Boots", Age=4.9 },
                       new Pet { Name="Whiskers", Age=1.5 },
                       new Pet { Name="Daisy", Age=4.3 } };

    // Group Pet objects by the Math.Floor of their age.
    // Then project an anonymous type from each group
    // that consists of the key, the count of the group's
    // elements, and the minimum and maximum age in the group.
    var query = petsList.AsQueryable().GroupBy(
        pet => Math.Floor(pet.Age),
        (age, pets) => new
        {
            Key = age,
            Count = pets.Count(),
            Min = pets.Min(pet => pet.Age),
            Max = pets.Max(pet => pet.Age)
        });

    // Iterate over each anonymous type.
    foreach (var result in query)
    {
        Console.WriteLine("\nAge group: " + result.Key);
        Console.WriteLine("Number of pets in this age group: " + result.Count);
        Console.WriteLine("Minimum age: " + result.Min);
        Console.WriteLine("Maximum age: " + result.Max);
    }

    /*  This code produces the following output:

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

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

        Age group: 1
        Number of pets in this age group: 1
        Minimum age: 1.5
        Maximum age: 1.5
    */
}

Universal Windows Platform
Disponível desde 4.5
.NET Framework
Disponível desde 3.5
Portable Class Library
Com suporte em: portable .NET platforms
Silverlight
Disponível desde 2.0
Windows Phone Silverlight
Disponível desde 7.1
Windows Phone
Disponível desde 8.1
Retornar ao topo
Mostrar:
© 2016 Microsoft