Icono del sitio Home Assistant Fácil

Operaciones básicas en Linq

En este fragmento os mostramos ciertas operaciones básicas que se pueden utilizar con las listas en C#. Son muy útiles para filtrar, ordenar, buscar y agrupar elementos de las listas IEnumerable.

El comando que equivale a la condición Where de una clausula SQL sería de la siguiente manera.

//Seleccionamos todos los estudiantes con la edad de 21 años
List<Estudiante> listaEstudiantesEdad = new List<Estudiante>();
listaEstudiantesEdad = listaEstudiantes.Where(estu => estu.Edad == 21).ToList();

//Si lo hacemos por el método tradicional
listaEstudiantesEdad = new List<Estudiante>();
foreach (var estu in listaEstudiantes)
{
 if (estu.Edad == 21)
 {
 listaEstudiantesEdad.Add(estu);
 }
}

//Puede contener varias clausulas
listaEstudiantesEdad = listaEstudiantes.Where(estu => estu.Edad == 21 && estu.Nota >= 5).ToList();

Como podéis comprobar se reduce mucho el código que hay que escribir. Otras funciones interesantes las podéis ver en el siguiente código.

//La sentencia ForEach permite hacer un bucle y recorrer todos los elementos en una sola línea de código
listaEstudiantes.ForEach(estu => estu.Nota == 8);

//Podemos ordenar la lista en sentido ascendente y descendente
listaEstudiants.OrderBy(estu=>estu.Edad);
listaEstudiants.OrderByDescending(estu=>estu.Edad);

//Eliminar todos los elementos que cumplan la condición
listaEstudiants.RemoveAll(estu=>estu.Nota <= 5);

int edadMax = listaEstudiants.Max(estu=>estu.Edad);
int edadMin = listaEstudiants.Min(estu=>estu.Edad);

//Podemos hacer una media de las notas de una manera muy simple
float mediaNotas = listaEstudiants.Sum(estu=>estu.Nota) / listaEstudiants.Count;

Algo más complejo sería hacer una agrupación. En el siguiente ejemplo os mostramos como podemos agrupar una lista de estudiantes por edades y mostrarlo por consola.

//Creamos la query
var mismaEdad =
        from estuidante in estudiantes
        group estudiante by estudiante.Edad into grupoMismaEdad
        orderby grupoMismaEdad.Key
        select grupoMismaEdad;

    foreach (var grupoEdad in mismaEdad)
    {
        Console.WriteLine("Edad en común: {0}", grupoEdad.Key);
        //Recorremos todos los estudiantes con la misma edad
        foreach (var estudiante in grupoEdad)
        {
            Console.WriteLine("\t{0}, {1} {2}", estudiante.Nombre, estudiante.Apellidos, estudiante.Edad);
        }
    }

Linq es realmente una herramienta muy potente que nos puede ayudar a comprimir nuestro código dejándolo a la mínima expresión como habéis podido comprobar.

Salir de la versión móvil