Queryable.GroupBy Metodo

Definizione

Raggruppa gli elementi di una sequenza.

Overload

GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>)

Raggruppa gli elementi di una sequenza in base a una funzione del selettore principale specificata e crea un valore risultante da ciascun gruppo e relativa chiave. Le chiavi sono confrontate utilizzando un operatore di confronto specificato e gli elementi di ogni gruppo vengono proiettati utilizzando una funzione specificata.

GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>)

Raggruppa gli elementi di una sequenza in base a una funzione del selettore principale specificata e crea un valore risultante da ciascun gruppo e relativa chiave. Gli elementi di ogni gruppo vengono proiettati usando una funzione specificata.

GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>)

Raggruppa gli elementi di una sequenza in base a una funzione specificata del selettore principale e proietta gli elementi di ogni gruppo utilizzando una funzione specificata.

GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>)

Raggruppa gli elementi di una sequenza e proietta gli elementi di ogni gruppo utilizzando una funzione specificata. I valori chiave vengono confrontati utilizzando un operatore di confronto specificato.

GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>)

Raggruppa gli elementi di una sequenza in base a una funzione del selettore principale specificata e crea un valore risultante da ciascun gruppo e relativa chiave.

GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>)

Raggruppa gli elementi di una sequenza in base a una funzione del selettore principale specificata e crea un valore risultante da ciascun gruppo e relativa chiave. Le chiavi vengono confrontate utilizzando un operatore di confronto specificato.

GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>)

Raggruppa gli elementi di una sequenza secondo una specificata funzione del selettore principale.

GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>)

Raggruppa gli elementi di una sequenza secondo una specificata funzione del selettore principale e confronta le chiavi utilizzando un operatore di confronto specificato.

GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>)

Origine:
Queryable.cs
Origine:
Queryable.cs
Origine:
Queryable.cs

Raggruppa gli elementi di una sequenza in base a una funzione del selettore principale specificata e crea un valore risultante da ciascun gruppo e relativa chiave. Le chiavi sono confrontate utilizzando un operatore di confronto specificato e gli elementi di ogni gruppo vengono proiettati utilizzando una funzione specificata.

C#
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TElement,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TElement>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
C#
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TElement,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TElement>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);

Parametri di tipo

TSource

Tipo degli elementi di source.

TKey

Tipo della chiave restituita dalla funzione rappresentata nell'oggetto keySelector.

TElement

Tipo degli elementi contenuti in ciascun oggetto IGrouping<TKey,TElement>.

TResult

Tipo del valore restituito dall'oggetto resultSelector.

Parametri

source
IQueryable<TSource>

Oggetto IQueryable<T> i cui elementi sono da raggruppare.

keySelector
Expression<Func<TSource,TKey>>

Funzione per estrarre la chiave per ogni elemento.

elementSelector
Expression<Func<TSource,TElement>>

Funzione per eseguire il mapping di ogni elemento di origine a un elemento in un oggetto IGrouping<TKey,TElement>.

resultSelector
Expression<Func<TKey,IEnumerable<TElement>,TResult>>

Funzione per creare un valore di risultato da ogni gruppo.

comparer
IEqualityComparer<TKey>

Oggetto IEqualityComparer<T> per confrontare le chiavi.

Restituisce

IQueryable<TResult>

Oggetto T:System.Linq.IQueryable`1 con un argomento di tipo di TResult e in cui ogni elemento rappresenta una proiezione su un gruppo e la relativa chiave.

Eccezioni

source o keySelector o elementSelector o resultSelector o comparer è null.

Commenti

Questo metodo ha almeno un parametro di tipo il Func<T,TResult> cui argomento di tipo Expression<TDelegate> è uno dei tipi. Per questi parametri, è possibile passare un'espressione lambda e verrà compilata in un Expression<TDelegate>oggetto .

Il GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>) metodo genera un MethodCallExpression oggetto che rappresenta la chiamata GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>) stessa come metodo generico costruito. Passa quindi l'oggetto MethodCallExpression al CreateQuery<TElement>(Expression) metodo dell'oggetto IQueryProvider rappresentato dalla Provider proprietà del source parametro.

Il comportamento della query che si verifica come risultato dell'esecuzione di un albero delle espressioni che rappresenta la chiamata GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>) dipende dall'implementazione del tipo del source parametro. Il comportamento previsto è che raggruppa gli elementi di source per valori chiave ottenuti richiamando keySelector ogni elemento. Il comparer parametro viene usato per confrontare i valori chiave. Il elementSelector parametro viene usato per proiettare gli elementi di ogni gruppo e il resultSelector parametro viene usato per ottenere un valore di risultato da ogni gruppo e la relativa chiave.

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>)

Origine:
Queryable.cs
Origine:
Queryable.cs
Origine:
Queryable.cs

Raggruppa gli elementi di una sequenza in base a una funzione del selettore principale specificata e crea un valore risultante da ciascun gruppo e relativa chiave. Gli elementi di ogni gruppo vengono proiettati usando una funzione specificata.

C#
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TElement,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TElement>,TResult>> resultSelector);

Parametri di tipo

TSource

Tipo degli elementi di source.

TKey

Tipo della chiave restituita dalla funzione rappresentata nell'oggetto keySelector.

TElement

Tipo degli elementi contenuti in ciascun oggetto IGrouping<TKey,TElement>.

TResult

Tipo del valore restituito dall'oggetto resultSelector.

Parametri

source
IQueryable<TSource>

Oggetto IQueryable<T> i cui elementi sono da raggruppare.

keySelector
Expression<Func<TSource,TKey>>

Funzione per estrarre la chiave per ogni elemento.

elementSelector
Expression<Func<TSource,TElement>>

Funzione per eseguire il mapping di ogni elemento di origine a un elemento in un oggetto IGrouping<TKey,TElement>.

resultSelector
Expression<Func<TKey,IEnumerable<TElement>,TResult>>

Funzione per creare un valore di risultato da ogni gruppo.

Restituisce

IQueryable<TResult>

Oggetto T:System.Linq.IQueryable`1 con un argomento di tipo di TResult e in cui ogni elemento rappresenta una proiezione su un gruppo e la relativa chiave.

Eccezioni

source, keySelector, elementSelector o resultSelector è null.

Esempio

L'esempio di codice seguente illustra come usare GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>) per raggruppare gli elementi di una sequenza e proiettare una sequenza di risultati di tipo TResult.

C#
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.AsQueryable().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
    */
}

Commenti

Questo metodo ha almeno un parametro di tipo il Func<T,TResult> cui argomento di tipo Expression<TDelegate> è uno dei tipi. Per questi parametri, è possibile passare un'espressione lambda e verrà compilata in un Expression<TDelegate>oggetto .

Il GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>) metodo genera un MethodCallExpression oggetto che rappresenta la chiamata GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>) stessa come metodo generico costruito. Passa quindi l'oggetto MethodCallExpression al CreateQuery<TElement>(Expression) metodo dell'oggetto IQueryProvider rappresentato dalla Provider proprietà del source parametro.

Il comportamento della query che si verifica come risultato dell'esecuzione di un albero delle espressioni che rappresenta la chiamata GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>) dipende dall'implementazione del tipo del source parametro. Il comportamento previsto è che raggruppa gli elementi di source per valori chiave ottenuti richiamando keySelector ogni elemento. Il elementSelector parametro viene usato per proiettare gli elementi di ogni gruppo e il resultSelector parametro viene usato per ottenere un valore di risultato da ogni gruppo e la relativa chiave.

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>)

Origine:
Queryable.cs
Origine:
Queryable.cs
Origine:
Queryable.cs

Raggruppa gli elementi di una sequenza in base a una funzione specificata del selettore principale e proietta gli elementi di ogni gruppo utilizzando una funzione specificata.

C#
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TElement>> GroupBy<TSource,TKey,TElement> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector);

Parametri di tipo

TSource

Tipo degli elementi di source.

TKey

Tipo della chiave restituita dalla funzione rappresentata nell'oggetto keySelector.

TElement

Tipo degli elementi contenuti in ciascun oggetto IGrouping<TKey,TElement>.

Parametri

source
IQueryable<TSource>

Oggetto IQueryable<T> i cui elementi sono da raggruppare.

keySelector
Expression<Func<TSource,TKey>>

Funzione per estrarre la chiave per ogni elemento.

elementSelector
Expression<Func<TSource,TElement>>

Funzione per eseguire il mapping di ogni elemento di origine a un elemento in un oggetto IGrouping<TKey,TElement>.

Restituisce

IQueryable<IGrouping<TKey,TElement>>

Oggetto IQueryable<IGrouping<TKey, TElement>> in C# o IQueryable(Of IGrouping(Of TKey, TElement)) in Visual Basic in cui ogni IGrouping<TKey,TElement> oggetto contiene una sequenza di oggetti di tipo TElement e una chiave.

Eccezioni

Il parametro source, il parametro keySelector o il parametro elementSelector è null.

Esempio

L'esempio di codice seguente illustra come usare GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>) per raggruppare gli elementi di una sequenza.

C#
class Pet
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public static void GroupByEx2()
{
    // Create a list of Pet objects.
    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 Pet.Age as the key.
    // Use Pet.Name as the value for each entry.
    IEnumerable<IGrouping<int, string>> query =
        pets.AsQueryable().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
*/

Commenti

Questo metodo ha almeno un parametro di tipo il Func<T,TResult> cui argomento di tipo Expression<TDelegate> è uno dei tipi. Per questi parametri, è possibile passare un'espressione lambda e verrà compilata in un Expression<TDelegate>oggetto .

Il GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>) metodo genera un MethodCallExpression oggetto che rappresenta la chiamata GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>) stessa come metodo generico costruito. Passa quindi l'oggetto MethodCallExpression al CreateQuery<TElement>(Expression) metodo dell'oggetto IQueryProvider rappresentato dalla Provider proprietà del source parametro.

Il comportamento della query che si verifica come risultato dell'esecuzione di un albero delle espressioni che rappresenta la chiamata GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>) dipende dall'implementazione del tipo del source parametro. Il comportamento previsto è che raggruppa gli elementi di source per un valore chiave ottenuto richiamando keySelector ogni elemento. elementSelector Richiama su ogni elemento per ottenere un elemento risultato.

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>)

Origine:
Queryable.cs
Origine:
Queryable.cs
Origine:
Queryable.cs

Raggruppa gli elementi di una sequenza e proietta gli elementi di ogni gruppo utilizzando una funzione specificata. I valori chiave vengono confrontati utilizzando un operatore di confronto specificato.

C#
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TElement>> GroupBy<TSource,TKey,TElement> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
C#
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TElement>> GroupBy<TSource,TKey,TElement> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);

Parametri di tipo

TSource

Tipo degli elementi di source.

TKey

Tipo della chiave restituita dalla funzione rappresentata nell'oggetto keySelector.

TElement

Tipo degli elementi contenuti in ciascun oggetto IGrouping<TKey,TElement>.

Parametri

source
IQueryable<TSource>

Oggetto IQueryable<T> i cui elementi sono da raggruppare.

keySelector
Expression<Func<TSource,TKey>>

Funzione per estrarre la chiave per ogni elemento.

elementSelector
Expression<Func<TSource,TElement>>

Funzione per eseguire il mapping di ogni elemento di origine a un elemento in un oggetto IGrouping<TKey,TElement>.

comparer
IEqualityComparer<TKey>

Oggetto IEqualityComparer<T> per confrontare le chiavi.

Restituisce

IQueryable<IGrouping<TKey,TElement>>

Oggetto IQueryable<IGrouping<TKey, TElement>> in C# o IQueryable(Of IGrouping(Of TKey, TElement)) in Visual Basic in cui ogni IGrouping<TKey,TElement> oggetto contiene una sequenza di oggetti di tipo TElement e una chiave.

Eccezioni

source, keySelector, elementSelector o comparer è null.

Commenti

Questo metodo ha almeno un parametro di tipo il Func<T,TResult> cui argomento di tipo Expression<TDelegate> è uno dei tipi. Per questi parametri, è possibile passare un'espressione lambda e verrà compilata in un Expression<TDelegate>oggetto .

Il GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>) metodo genera un MethodCallExpression oggetto che rappresenta la chiamata GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>) stessa come metodo generico costruito. Passa quindi l'oggetto MethodCallExpression al CreateQuery<TElement>(Expression) metodo dell'oggetto IQueryProvider rappresentato dalla Provider proprietà del source parametro.

Il comportamento della query che si verifica come risultato dell'esecuzione di un albero delle espressioni che rappresenta la chiamata GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>) dipende dall'implementazione del tipo del source parametro. Il comportamento previsto è che raggruppa gli elementi di source per un valore chiave ottenuto richiamando keySelector ogni elemento. I valori chiave vengono confrontati usando comparer. Il elementSelector parametro viene richiamato in ogni elemento per ottenere un elemento risultato.

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>)

Origine:
Queryable.cs
Origine:
Queryable.cs
Origine:
Queryable.cs

Raggruppa gli elementi di una sequenza in base a una funzione del selettore principale specificata e crea un valore risultante da ciascun gruppo e relativa chiave.

C#
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TSource>,TResult>> resultSelector);

Parametri di tipo

TSource

Tipo degli elementi di source.

TKey

Tipo della chiave restituita dalla funzione rappresentata nell'oggetto keySelector.

TResult

Tipo del valore restituito dall'oggetto resultSelector.

Parametri

source
IQueryable<TSource>

Oggetto IQueryable<T> i cui elementi sono da raggruppare.

keySelector
Expression<Func<TSource,TKey>>

Funzione per estrarre la chiave per ogni elemento.

resultSelector
Expression<Func<TKey,IEnumerable<TSource>,TResult>>

Funzione per creare un valore di risultato da ogni gruppo.

Restituisce

IQueryable<TResult>

Oggetto T:System.Linq.IQueryable`1 con un argomento di tipo e TResult in cui ogni elemento rappresenta una proiezione su un gruppo e la relativa chiave.

Eccezioni

Il parametro source, il parametro keySelector o il parametro resultSelector è null.

Esempio

Nell'esempio di codice seguente viene illustrato come usare GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>) per raggruppare gli elementi di una sequenza e proiettare una sequenza di risultati di tipo TResult.

C#
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
    */
}

Commenti

Questo metodo ha almeno un parametro di tipo Expression<TDelegate> il cui argomento di tipo è uno dei Func<T,TResult> tipi . Per questi parametri, è possibile passare un'espressione lambda e verrà compilata in un oggetto Expression<TDelegate>.

Il GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>) metodo genera un MethodCallExpression oggetto che rappresenta GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>) se stesso come metodo generico costruito. Passa quindi l'oggetto MethodCallExpression al CreateQuery<TElement>(Expression) metodo dell'oggetto IQueryProvider rappresentato dalla Provider proprietà del source parametro .

Il comportamento della query che si verifica come risultato dell'esecuzione di un albero delle espressioni che rappresenta la chiamata GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>) dipende dall'implementazione del tipo del source parametro. Il comportamento previsto è che raggruppa gli elementi di da un valore chiave source ottenuto richiamando keySelector su ogni elemento. Il resultSelector parametro viene usato per ottenere un valore di risultato da ogni gruppo e dalla relativa chiave.

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>)

Origine:
Queryable.cs
Origine:
Queryable.cs
Origine:
Queryable.cs

Raggruppa gli elementi di una sequenza in base a una funzione del selettore principale specificata e crea un valore risultante da ciascun gruppo e relativa chiave. Le chiavi vengono confrontate utilizzando un operatore di confronto specificato.

C#
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TSource>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
C#
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TSource>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);

Parametri di tipo

TSource

Tipo degli elementi di source.

TKey

Tipo della chiave restituita dalla funzione rappresentata nell'oggetto keySelector.

TResult

Tipo del valore restituito dall'oggetto resultSelector.

Parametri

source
IQueryable<TSource>

Oggetto IQueryable<T> i cui elementi sono da raggruppare.

keySelector
Expression<Func<TSource,TKey>>

Funzione per estrarre la chiave per ogni elemento.

resultSelector
Expression<Func<TKey,IEnumerable<TSource>,TResult>>

Funzione per creare un valore di risultato da ogni gruppo.

comparer
IEqualityComparer<TKey>

Oggetto IEqualityComparer<T> per confrontare le chiavi.

Restituisce

IQueryable<TResult>

Oggetto T:System.Linq.IQueryable`1 con un argomento di tipo e TResult in cui ogni elemento rappresenta una proiezione su un gruppo e la relativa chiave.

Eccezioni

source, keySelector, resultSelector o comparer è null.

Commenti

Questo metodo ha almeno un parametro di tipo Expression<TDelegate> il cui argomento di tipo è uno dei Func<T,TResult> tipi . Per questi parametri, è possibile passare un'espressione lambda e verrà compilata in un oggetto Expression<TDelegate>.

Il GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>) metodo genera un MethodCallExpression oggetto che rappresenta GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>) se stesso come metodo generico costruito. Passa quindi l'oggetto MethodCallExpression al CreateQuery<TElement>(Expression) metodo dell'oggetto IQueryProvider rappresentato dalla Provider proprietà del source parametro .

Il comportamento della query che si verifica come risultato dell'esecuzione di un albero delle espressioni che rappresenta la chiamata GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>) dipende dall'implementazione del tipo del source parametro. Il comportamento previsto è che raggruppa gli elementi di source per valori chiave ottenuti richiamando keySelector su ogni elemento. Il comparer parametro viene usato per confrontare le chiavi e il resultSelector parametro viene usato per ottenere un valore di risultato da ogni gruppo e dalla relativa chiave.

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>)

Origine:
Queryable.cs
Origine:
Queryable.cs
Origine:
Queryable.cs

Raggruppa gli elementi di una sequenza secondo una specificata funzione del selettore principale.

C#
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TSource>> GroupBy<TSource,TKey> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector);

Parametri di tipo

TSource

Tipo degli elementi di source.

TKey

Tipo della chiave restituita dalla funzione rappresentata nell'oggetto keySelector.

Parametri

source
IQueryable<TSource>

Oggetto IQueryable<T> i cui elementi sono da raggruppare.

keySelector
Expression<Func<TSource,TKey>>

Funzione per estrarre la chiave per ogni elemento.

Restituisce

IQueryable<IGrouping<TKey,TSource>>

Oggetto IQueryable<IGrouping<TKey, TSource>> in C# o IQueryable(Of IGrouping(Of TKey, TSource)) in Visual Basic in cui ogni IGrouping<TKey,TElement> oggetto contiene una sequenza di oggetti e una chiave.

Eccezioni

source o keySelector è null.

Esempio

Nell'esempio di codice seguente viene illustrato come usare GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) per raggruppare gli elementi di una sequenza.

C#
class Pet
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public static void GroupByEx1()
{
    // Create a list of Pet objects.
    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 Pet.Age as the key.
    // Use Pet.Name as the value for each entry.
    var query = pets.AsQueryable().GroupBy(pet => pet.Age);

    // Iterate over each IGrouping in the collection.
    foreach (var ageGroup in query)
    {
        Console.WriteLine("Age group: {0}  Number of pets: {1}", ageGroup.Key, ageGroup.Count());
    }
}

/*
    This code produces the following output:

    Age group: 8  Number of pets: 1
    Age group: 4  Number of pets: 2
    Age group: 1  Number of pets: 1

*/

Commenti

Questo metodo ha almeno un parametro di tipo Expression<TDelegate> il cui argomento di tipo è uno dei Func<T,TResult> tipi . Per questi parametri, è possibile passare un'espressione lambda e verrà compilata in un oggetto Expression<TDelegate>.

Il GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) metodo genera un MethodCallExpression oggetto che rappresenta GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) se stesso come metodo generico costruito. Passa quindi l'oggetto MethodCallExpression al CreateQuery<TElement>(Expression) metodo dell'oggetto IQueryProvider rappresentato dalla Provider proprietà del source parametro .

Il comportamento della query che si verifica come risultato dell'esecuzione di un albero delle espressioni che rappresenta la chiamata GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) dipende dall'implementazione del tipo del source parametro. Il comportamento previsto è che raggruppa gli elementi di da un valore chiave source ottenuto richiamando keySelector su ogni elemento.

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>)

Origine:
Queryable.cs
Origine:
Queryable.cs
Origine:
Queryable.cs

Raggruppa gli elementi di una sequenza secondo una specificata funzione del selettore principale e confronta le chiavi utilizzando un operatore di confronto specificato.

C#
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TSource>> GroupBy<TSource,TKey> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
C#
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TSource>> GroupBy<TSource,TKey> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);

Parametri di tipo

TSource

Tipo degli elementi di source.

TKey

Tipo della chiave restituita dalla funzione rappresentata nell'oggetto keySelector.

Parametri

source
IQueryable<TSource>

Oggetto IQueryable<T> i cui elementi sono da raggruppare.

keySelector
Expression<Func<TSource,TKey>>

Funzione per estrarre la chiave per ogni elemento.

comparer
IEqualityComparer<TKey>

Oggetto IEqualityComparer<T> per confrontare le chiavi.

Restituisce

IQueryable<IGrouping<TKey,TSource>>

Oggetto IQueryable<IGrouping<TKey, TSource>> in C# o IQueryable(Of IGrouping(Of TKey, TSource)) in Visual Basic in cui ogni IGrouping<TKey,TElement> classe contiene una sequenza di oggetti e una chiave.

Eccezioni

Il parametro source, il parametro keySelector o il parametro comparer è null.

Commenti

Questo metodo ha almeno un parametro di tipo Expression<TDelegate> il cui argomento di tipo è uno dei Func<T,TResult> tipi . Per questi parametri, è possibile passare un'espressione lambda e verrà compilata in un oggetto Expression<TDelegate>.

Il GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>) metodo genera un MethodCallExpression oggetto che rappresenta GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>) se stesso come metodo generico costruito. Passa quindi l'oggetto MethodCallExpression al CreateQuery<TElement>(Expression) metodo dell'oggetto IQueryProvider rappresentato dalla Provider proprietà del source parametro .

Il comportamento della query che si verifica come risultato dell'esecuzione di un albero delle espressioni che rappresenta la chiamata GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>) dipende dall'implementazione del tipo del source parametro. Il comportamento previsto è che raggruppa gli elementi di source per un valore di chiave. Il valore della chiave viene ottenuto richiamando keySelector su ogni elemento e i valori di chiave vengono confrontati usando comparer.

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0