DEV Community

Panchi
Panchi

Posted on

Agrupamiento de datos de una lista usando LINQ en C#

Un ejemplo de una consulta LINQ en C# que realiza un agrupamiento de datos de una lista (list) basada en el atributo Idde los objetos, y luego organiza los datos agrupados en un nuevo formato.

public class Person
{
    public int Id { get; set; }
    public string? Car { get; set; }
}

static void Main(string[] args)
{
    List<Person> list = [
        new () { Id = 1, Car = "Toyota" },
        new () { Id = 1, Car = "Honda" },
        new () { Id = 2, Car = "Ford" },
        new () { Id = 2, Car = "Chevrolet" },
        new () { Id = 1, Car = "Mazda" },
        new () {Id = 3,Car="Corvete"},
        ];

    var result = (
        from p in list
            group p.Car by p.Id into g
            select new
            {
                PersonId=g.Key,
                Cars=g.OrderBy(car=>car).ToList()
            }
        );

    foreach ( var p in result)
    {
        Console.WriteLine($"PersonId: {p.PersonId}");
        Console.WriteLine($"Cars");
        foreach (var item in p.Cars)
        {
            Console.WriteLine($"- {item}");
        }

        Console.WriteLine();
    }

    Console.WriteLine();
}
Enter fullscreen mode Exit fullscreen mode
  1. Definir la clase con las propiedades correspondientes. Ejemplo: **public class Person {}**.

  2. Definir en una lista cada una de las propiedades asociadas a la clase antes definida agregando sus respectivos datos.

  3. Agrupa los valores de la propiedad Carde cada objeto por su correspondiente Id. Usando group by de LINQ.

  • Dentro de cada grupo, organiza los elementos de Car en un orden específico.
  1. Uso de select new, para crear una nueva lista de objetos con las siguientes propiedades:
  • PersonId: La clave del grupo (Id).

  • Cars: Los valores agrupados de Car, ordenados alfabéticamente o numéricamente (según el tipo de Car), convertidos en una lista.

Ejecución:

Image description

Top comments (0)