LINQ básico ejemplos
List<Alumno> listaAlumnos = new List<Alumno>() { new Alumno("Eva",20,6.0), new Alumno("Ana",22,7.0), new Alumno("Rosa",22,4.0), new Alumno("Ot",20,3.0), new Alumno("Iu",30,6.8), new Alumno("Pep",32,5.9), new Alumno("Laia",30,2.3), new Alumno("Quim",32,1.7), }; // Seleccionamos todos los alumnos (devuelve un IEnumerable de tipo Alumno var res = from alumno in listaAlumnos select alumno; foreach (Alumno al in res) { Console.WriteLine(al); } Console.WriteLine(String.Join(",", res)); // Seleccionamos sólo el nombre de los alumnos (devuelve un IEnumerable de tipo string var res2 = from alumno in listaAlumnos select alumno.Nombre; foreach (string al in res2) { Console.WriteLine(al); } Console.WriteLine(String.Join(",", res2)); //Sólo los aprobados res = from alumno in listaAlumnos where alumno.Nota >= 5 select alumno; Console.WriteLine(String.Join(" | ", res)); listaAlumnos.Add(new Alumno("Einstein", 50, 10)); //Vuelve a ejecutarse la consulta LINQ Console.WriteLine(String.Join(" | ", res)); //Ejecución inmediata List<Alumno> inmediato = (from alumno in listaAlumnos where alumno.Nota >= 5 select alumno).ToList<Alumno>(); //Podemos usar las funciones de los enumerables Console.WriteLine(res.Count()); Console.WriteLine(String.Join(" | ", res.Reverse())); //Ordenadr ascendente o descendente res = from alumno in listaAlumnos where alumno.Nota >= 5 orderby alumno.Nota descending select alumno; Console.WriteLine(String.Join(" | ", res)); //Agrupando var agrupado = from alumno in listaAlumnos group alumno by alumno.Nombre.Length; Console.WriteLine(String.Join(",", agrupado.First())); Console.WriteLine(agrupado.Count()); foreach (var grupo in agrupado) { Console.WriteLine("Agrupado por el valor: " + grupo.Key + " valores " + grupo.Count()); foreach (Alumno al in grupo) { Console.WriteLine(al); } } agrupado = from alumno in listaAlumnos group alumno by alumno.Edad into g orderby g.Key descending select g; foreach (var grupo in agrupado) { Console.WriteLine("Agrupado por el valor: " + grupo.Key); foreach (Alumno al in grupo) { Console.WriteLine(al); } } Console.WriteLine("-----"); agrupado = from alumno in listaAlumnos group alumno by alumno.Nombre.Length into g where g.Sum(al => al.Nota) > 10 orderby g.Key descending select g; foreach (var grupo in agrupado) { Console.WriteLine("Agrupado por el valor: " + grupo.Key); Console.WriteLine(String.Join(",", grupo)); } // Obtener los nombres y edades de los alumnos mayores de 25 años, ordenados por edad de forma descendente, y mostrar solo los primeros 3 resultados. var consultaCompleja = (from alumno in listaAlumnos where alumno.Edad > 25 orderby alumno.Edad descending select new { alumno.Nombre, alumno.Edad }) .Take(3) .ToList(); // Agrupar los alumnos por edad y calcular el promedio de notas para cada grupo. var agrupacionPromedio = from alumno in listaAlumnos group alumno by alumno.Edad into grupos select new { Edad = grupos.Key, PromedioNotas = grupos.Average(a => a.Nota) }; // Realizar una consulta que combine la lista de alumnos con otra lista, utilizando join y seleccionando solo aquellos que tienen una nota mayor a 5. var otraListaAlumnos = new List<Alumno>{new Alumno("Eva", 20, 8.0), new Alumno("Ana", 22, 6.5), new Alumno("Rosa", 22, 4.5)}; var resultadoJoin = from alumno in listaAlumnos join otraLista in otraListaAlumnos on alumno.Nombre equals otraLista.Nombre where otraLista.Nota > 5 select new { alumno.Nombre, alumno.Nota, NotaOtraLista = otraLista.Nota }; // Utilizar la claúsula let para calcular la edad ajustada de cada alumno y seleccionar aquellos cuya edad ajustada sea mayor a 25. var consultaLet = from alumno in listaAlumnos let edadAjustada = alumno.Edad + 5 where edadAjustada > 25 select new { alumno.Nombre, EdadAjustada = edadAjustada }; // Filtrar los alumnos mayores de 25 años cuya nota sea mayor a 5, ordenados por edad de forma ascendente y luego por nota de forma descendente. var consultaConCondiciones = from alumno in listaAlumnos where alumno.Edad > 25 && alumno.Nota > 5 orderby alumno.Edad, alumno.Nota descending select alumno; var mejorAlumno = (from alumno in listaAlumnos orderby alumno.Nota descending select alumno).First(); // Encuentra el nombre y la edad de los alumnos que tienen una nota superior a 5 y que no tienen el mismo nombre que ningún otro alumno. var alumnosUnicosConBuenasNotas = (from alumno in listaAlumnos where alumno.Nota > 5 group alumno by alumno.Nombre into grupo where grupo.Count() == 1 select grupo); }