C# Language Raggruppa per

Esempio

GroupBy è un modo semplice per ordinare una raccolta di oggetti IEnumerable<T> in gruppi distinti.

Semplice esempio

In questo primo esempio, ci ritroviamo con due gruppi, elementi pari e dispari.

List<int> iList = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var grouped = iList.GroupBy(x => x % 2 == 0);

//Groups iList into odd [13579] and even[2468] items 
       
foreach(var group in grouped)
{
    foreach (int item in group)
    {
        Console.Write(item); // 135792468  (first odd then even)
    }
}

Esempio più complesso

Prendiamo come esempio un elenco di persone per età. Per prima cosa creeremo un oggetto Persona che ha due proprietà, Nome ed Età.

public class Person
{
    public int Age {get; set;}
    public string Name {get; set;}
}

Quindi creiamo la nostra lista di esempi di persone con vari nomi ed età.

List<Person> people = new List<Person>();
people.Add(new Person{Age = 20, Name = "Mouse"});
people.Add(new Person{Age = 30, Name = "Neo"});
people.Add(new Person{Age = 40, Name = "Morpheus"});
people.Add(new Person{Age = 30, Name = "Trinity"});
people.Add(new Person{Age = 40, Name = "Dozer"});
people.Add(new Person{Age = 40, Name = "Smith"});

Quindi creiamo una query LINQ per raggruppare il nostro elenco di persone per età.

var query = people.GroupBy(x => x.Age);

In questo modo, possiamo vedere l'età per ogni gruppo e avere un elenco di ogni persona nel gruppo.

foreach(var result in query)
{
    Console.WriteLine(result.Key);
                
    foreach(var person in result)
        Console.WriteLine(person.Name);
}

Ciò risulta nell'output seguente:

20
Mouse
30
Neo
Trinity
40
Morpheus
Dozer
Smith

Puoi giocare con la demo live su .NET Fiddle