LINQ ejemplos
class Alumno
{
public string Nombre { get; set; }
public int Edad { get; set; }
public double Nota { get; set; }
public Alumno(string nombre, int edad, double nota)
{
Nombre = nombre;
Edad = edad;
Nota = nota;
}
public override string ToString()
{
return Nombre+" - "+Edad+" - "+Nota;
}
}
[c]
Ejemplos
[c]
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),
};
//Filtrar(Where): Seleccionar alumnos mayores de 25 años.
var mayoresDe25 = listaAlumnos.Where(alumno => alumno.Edad > 25).ToList();
// Ordenar(OrderBy, ThenBy): Ordenar alumnos por edad y luego por nombre.
var ordenados = listaAlumnos.OrderBy(alumno => alumno.Edad).ThenBy(alumno => alumno.Nombre).ToList();
// 3.Seleccionar(Select): Obtener solo los nombres de los alumnos.
var nombres = listaAlumnos.Select(alumno => alumno.Nombre).ToList();
// 4.Proyección(Select): Crear una lista de objetos anónimos con nombres y edades.
var proyeccion = listaAlumnos.Select(alumno => new { Nombre = alumno.Nombre, Edad = alumno.Edad }).ToList();
foreach(var elemento in proyeccion)
{
Console.WriteLine(elemento.Nombre+" - "+ elemento.Edad);
}
// 5.Agregación(Count, Sum, Average, Min, Max):
// Contar el número de alumnos.
var cantidadAlumnos = listaAlumnos.Count();
// Calcular la suma de las edades.
var sumaEdades = listaAlumnos.Sum(alumno => alumno.Edad);
// Calcular el promedio de las notas.
var promedioNotas = listaAlumnos.Average(alumno => alumno.Nota);
// Obtener la edad mínima y máxima.
var edadMinima = listaAlumnos.Min(alumno => alumno.Edad);
var edadMaxima = listaAlumnos.Max(alumno => alumno.Edad);
// 6.Agrupar(GroupBy): Agrupar alumnos por edad.
var gruposPorEdad = listaAlumnos.GroupBy(alumno => alumno.Edad);
// 7.Filtrar y Proyectar(Where, Select): Obtener nombres de alumnos mayores de 25 años.
var nombresMayoresDe25 = listaAlumnos
.Where(alumno => alumno.Edad > 25)
.Select(alumno => alumno.Nombre)
.ToList();
// 8.Unión(Concat): Unir dos listas de alumnos.
var otraLista = new List<Alumno> { new Alumno("Sara", 28, 8.5), new Alumno("David", 25, 6.7) };
var listaCombinada = listaAlumnos.Concat(otraLista).ToList();
// 9.Buscar(FirstOrDefault, LastOrDefault): Obtener el primer alumno mayor de 30 años.
var primerMayorDe30 = listaAlumnos.FirstOrDefault(alumno => alumno.Edad > 30);
/// Obtener el último alumno con una nota mayor a 7.
var ultimoNotaMayor7 = listaAlumnos.LastOrDefault(alumno => alumno.Nota > 7);
// 10.Existencia(Any, All):
//Verificar si hay algún alumno con edad menor de 18.
var hayMenorDe18 = listaAlumnos.Any(alumno => alumno.Edad < 18);
// Verificar si todos los alumnos tienen una nota mayor a 5.
var todosAprobados = listaAlumnos.All(alumno => alumno.Nota > 5);
// Tomar un número específico de elementos(Take): Obtener los primeros 3 alumnos de la lista.
var primerosTresAlumnos = listaAlumnos.Take(3).ToList();
// Tomar los alumnos mayores de 25 años y limitar a los primeros 2.
var mayoresDe25_2 = listaAlumnos.Where(alumno => alumno.Edad > 25).Take(2).ToList();
// .Saltar un número específico de elementos(Skip): Saltar los primeros 2 alumnos de la lista.
var alumnosDespuesDeDos = listaAlumnos.Skip(2).ToList();
// Obtener los alumnos mayores de 25 años después de saltar los primeros 1.
var mayoresDespuesDeUno = listaAlumnos.Where(alumno => alumno.Edad > 25).Skip(1).ToList();
//.Combinar Take y Skip para paginación: Obtener la segunda página de 3 alumnos cada una.
int pageSize = 3;
int pageNumber = 2;
var pagina = listaAlumnos.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();