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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//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.