Exportar (0) Imprimir
Expandir Tudo
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original

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

Parâmetros

source
Tipo: System.Linq.IQueryable<TSource>
Um IQueryable<T> cujos elementos para agrupar.
keySelector
Tipo: System.Linq.Expressions.Expression<Func<TSource, TKey>>
Uma função para extrair a chave para cada elemento.
resultSelector
Tipo: System.Linq.Expressions.Expression<Func<TKey, IEnumerable<TSource>, TResult>>
Uma função para criar um valor de resultado de cada grupo.

Valor de retorno

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

Observação de uso

No Visual Basic e no C#, você pode chamar esse método como um método de instância em qualquer objeto do tipo IQueryable<TSource>. Quando você usar a sintaxe de método de instância para chamar esse método, omita o primeiro parâmetro. Para obter mais informações, consulte Métodos de extensão (Visual Basic) ou Métodos de extensão (Guia de Programação em C#).

ExceçãoCondição
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
    */
}


.NET Framework

Com suporte em: 4.5.2, 4.5.1, 4.5, 4, 3.5

.NET Framework Client Profile

Com suporte em: 4, 3.5 SP1

Biblioteca de Classes Portátil

Com suporte em: Biblioteca de Classes Portátil

.NET para aplicativos da Windows Store

Com suporte em: Windows 8

.NET para aplicativos do Windows Phone

Com suporte em: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Função Server Core sem suporte), Windows Server 2008 R2 (Função Server Core com suporte com o SP1 ou posterior, Itanium sem suporte)

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte Requisitos do sistema do .NET Framework.

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2014 Microsoft