Las expresiones lambda son una de las herramientas más potentes dentro del ecosistema de C# y LINQ (Language Integrated Query). Estas expresiones permiten definir funciones anónimas de una forma concisa y eficiente, facilitando la manipulación de colecciones y datos. En este artículo, exploraremos a fondo cómo funcionan, sus ventajas y su aplicación práctica en consultas LINQ.
¿Qué es una Expresión Lambda?
Una expresión lambda es una función anónima que se utiliza principalmente para definir delegados o funciones dentro de LINQ. Se caracteriza por la sintaxis:
(parametros) => expresión_o_bloque_de_código;
Por ejemplo, una expresión lambda que suma dos números:
Func<int, int, int> suma = (a, b) => a + b;
Console.WriteLine(suma(3, 5)); // Salida: 8
El operador =>
se lee como «va a» y divide los parámetros de la función de su cuerpo.
Ventajas de Usar Expresiones Lambda
- Sintaxis Concisa: Reduce la cantidad de código necesario para definir funciones.
- Mejor Legibilidad: Hace que las consultas LINQ sean más intuitivas.
- Uso con Delegados y Func: Se integran fácilmente con
Func<T>
yAction<T>
. - Optimización del Rendimiento: LINQ y el compilador de C# optimizan su ejecución.
Uso de Expresiones Lambda en LINQ
Las expresiones lambda son clave en las consultas LINQ, permitiendo operar sobre colecciones con métodos como Where
, Select
, OrderBy
, entre otros.
1. Filtrar Elementos con Where
List<int> numeros = new List<int> { 1, 2, 3, 4, 5, 6 };
var numerosPares = numeros.Where(n => n
Console.WriteLine(string.Join(", ", numerosPares)); // Salida: 2, 4, 6
2. Transformar Datos con Select
List<string> nombres = new List<string> { "Ana", "Bruno", "Carlos" };
var nombresMayusculas = nombres.Select(n => n.ToUpper()).ToList();
Console.WriteLine(string.Join(", ", nombresMayusculas)); // ANA, BRUNO, CARLOS
3. Ordenar con OrderBy y OrderByDescending
List<int> valores = new List<int> { 5, 1, 4, 3, 2 };
var valoresOrdenados = valores.OrderBy(v => v).ToList();
var valoresDescendentes = valores.OrderByDescending(v => v).ToList();
Console.WriteLine(string.Join(", ", valoresOrdenados)); // 1, 2, 3, 4, 5
Console.WriteLine(string.Join(", ", valoresDescendentes)); // 5, 4, 3, 2, 1
4. Buscar Elementos con First y FirstOrDefault
List<int> lista = new List<int> { 3, 7, 10, 15 };
var primerMayorA5 = lista.First(n => n > 5);
Console.WriteLine(primerMayorA5); // 7
5. Agrupar Datos con GroupBy
var personas = new List<Persona>
{
new Persona { Nombre = "Ana", Ciudad = "Madrid" },
new Persona { Nombre = "Bruno", Ciudad = "Madrid" },
new Persona { Nombre = "Carlos", Ciudad = "Barcelona" }
};
var grupos = personas.GroupBy(p => p.Ciudad);
foreach (var grupo in grupos)
{
Console.WriteLine($"Ciudad: {grupo.Key}");
foreach (var persona in grupo)
{
Console.WriteLine($" - {persona.Nombre}");
}
}
6. Calcular Promedios y Sumas con Aggregate y Average
List<int> edades = new List<int> { 20, 25, 30, 35, 40 };
double promedio = edades.Average();
int suma = edades.Sum();
Console.WriteLine($"Edad Promedio: {promedio}"); // 30
Console.WriteLine($"Suma Total: {suma}"); // 150
Conclusión
Las expresiones lambda son una herramienta clave en C# y LINQ para simplificar consultas y manipular datos de forma eficiente. Gracias a su sintaxis compacta y potente, podemos realizar operaciones complejas con pocas líneas de código.
Si quieres seguir aprendiendo sobre LINQ y expresiones lambda, suscríbete a mi blog donde comparto contenido detallado sobre programación en C#.