Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Enumerable.GroupBy<TSource, TKey, TElement> (IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>)

 

Data di pubblicazione: novembre 2016

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

Spazio dei nomi:   System.Linq
Assembly:  System.Core (in System.Core.dll)

public static IEnumerable<IGrouping<TKey, TElement>> GroupBy<TSource, TKey, TElement>(
	this IEnumerable<TSource> source,
	Func<TSource, TKey> keySelector,
	Func<TSource, TElement> elementSelector
)

Parametri

source
Type: System.Collections.Generic.IEnumerable<TSource>

Un IEnumerable<T> cui raggruppare gli elementi.

keySelector
Type: System.Func<TSource, TKey>

Funzione per estrarre la chiave per ogni elemento.

elementSelector
Type: System.Func<TSource, TElement>

Per eseguire il mapping di ogni elemento di origine a un elemento in una funzione di IGrouping<TKey, TElement>.

Valore restituito

Type: System.Collections.Generic.IEnumerable<IGrouping<TKey, TElement>>

Un IEnumerable<IGrouping<TKey, TElement>> in c# o IEnumerable(Of IGrouping(Of TKey, TElement)) in Visual Basic in cui ogni IGrouping<TKey, TElement> oggetto contiene una raccolta di oggetti di tipo TElement e una chiave.

Parametri tipo

TSource

Tipo degli elementi di source.

TKey

Tipo della chiave restituita dall'oggetto keySelector.

TElement

Tipo degli elementi contenuti nell'oggetto IGrouping<TKey, TElement>.

Exception Condition
ArgumentNullException

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

Questo metodo viene implementato tramite esecuzione posticipata. Il valore restituito immediato è un oggetto che archivia tutte le informazioni necessarie per eseguire l'azione. La query rappresentata da questo metodo non viene eseguita finché l'oggetto viene enumerata chiamando il relativo GetEnumerator metodo direttamente o tramite foreach in Visual C# o For Each in Visual Basic.

Il GroupBy<TSource, TKey, TElement>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>) metodo restituisce una raccolta di IGrouping<TKey, TElement> oggetti, uno per ogni chiave diversa è stata rilevata. Un IGrouping<TKey, TElement> è un IEnumerable<T> che include anche una chiave associata agli elementi.

Il IGrouping<TKey, TElement> gli oggetti vengono restituiti in un ordine in base all'ordine elementi source che produce la prima chiave di ogni IGrouping<TKey, TElement>. Gli elementi in un raggruppamento vengono restituiti nell'ordine in cui gli elementi che li ha prodotti vengono visualizzati in source.

Operatore di uguaglianza predefinito Default viene utilizzato per confrontare le chiavi.

Esempio di codice seguente viene illustrato come utilizzare GroupBy<TSource, TKey, TElement>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>) per raggruppare gli elementi di una sequenza.

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
*/

Nella sintassi delle espressioni di query, un group by (Visual C#) o Group By Into (Visual Basic) clausola viene convertita in una chiamata di GroupBy. La conversione dell'espressione di query nell'esempio seguente è equivalente alla query nell'esempio precedente.

IEnumerable<IGrouping<int, string>> query =
    from pet in pets
    group pet.Name by pet.Age;
System_CAPS_noteNota

In un Visual C# o Visual Basic espressione di query, l'elemento e le espressioni di selezione della chiave si verificano in ordine inverso rispetto alle posizioni degli argomenti in una chiamata al GroupBy<TSource, TKey, TElement>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>) metodo.

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 3.5
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: