LINQ
LINQ (Language Integrated Query) es una tecnología de .NET que permite consultar y manipular datos de diferentes orígenes de datos, como colecciones, bases de datos, servicios web, etc. En esta respuesta, me centraré en cómo usar LINQ con colecciones.
Para usar LINQ con colecciones, primero debes tener una colección que implemente la interfaz IEnumerable<T>
. Aquí hay un ejemplo de cómo crear una lista de enteros y usar LINQ para consultarla:
List<int> numeros = new List<int> { 1, 2, 3, 4, 5 };
// Obtener todos los números pares
var numerosPares = from numero in numeros
where numero % 2 == 0
select numero;
// Obtener la suma de todos los números
var suma = numeros.Sum();
// Obtener el número máximo
var maximo = numeros.Max();
// Obtener el número mínimo
var minimo = numeros.Min();
// Obtener el promedio de los números
var promedio = numeros.Average();
En este ejemplo, hemos creado una lista de enteros llamada numeros
y hemos usado LINQ para consultarla. Primero, hemos usado una expresión de consulta para obtener todos los números pares de la lista. Luego, hemos usado los métodos de extensión Sum
, Max
, Min
y Average
para obtener la suma, el número máximo, el número mínimo y el promedio de los números de la lista.
Aquí hay algunos otros métodos de extensión útiles que puedes usar con colecciones en LINQ:
Where
: filtra los elementos de una secuencia según un predicado.Select
: proyecta cada elemento de una secuencia en un nuevo formulario.OrderBy
: ordena los elementos de una secuencia en orden ascendente.OrderByDescending
: ordena los elementos de una secuencia en orden descendente.Take
: devuelve un número especificado de elementos de una secuencia.Skip
: omite un número especificado de elementos de una secuencia.A continuación, se describen algunos métodos LINQ comunes que puedes usar con colecciones, junto con ejemplos detallados:
1.
Where
– Filtrar Elementos:Este método se utiliza para filtrar elementos de una colección que cumplan con ciertos criterios.
List<int> numeros = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var numerosPares = numeros.Where(n => n % 2 == 0); foreach (var numero in numerosPares) { Console.WriteLine(numero); // Salida: 2, 4, 6, 8, 10 }
2.
Select
– Proyección de Elementos:Este método se utiliza para proyectar (transformar) cada elemento de una colección.
var cuadrados = numeros.Select(n => n * n); foreach (var cuadrado in cuadrados) { Console.WriteLine(cuadrado); // Salida: 1, 4, 9, 16, 25, 36, 49, 64, 81, 100 }
3.
OrderBy
– Ordenar Elementos:Este método se utiliza para ordenar los elementos de una colección según un criterio.
var numerosOrdenados = numeros.OrderBy(n => n); foreach (var numero in numerosOrdenados) { Console.WriteLine(numero); // Salida: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
4.
GroupBy
– Agrupar Elementos:Este método se utiliza para agrupar elementos de una colección según un criterio.
var grupos = numeros.GroupBy(n => n % 2 == 0 ? "Pares" : "Impares"); foreach (var grupo in grupos) { Console.WriteLine($"Clave: {grupo.Key}, Elementos: {string.Join(", ", grupo)}"); }
5.
Any
– Verificar Existencia de Elementos:Este método se utiliza para verificar si algún elemento de una colección cumple con ciertos criterios.
bool hayNumerosMayoresA5 = numeros.Any(n => n > 5); Console.WriteLine(hayNumerosMayoresA5); // Salida: True
6.
All
– Verificar Todos los Elementos:Este método se utiliza para verificar si todos los elementos de una colección cumplen con ciertos criterios.
bool todosSonPares = numeros.All(n => n % 2 == 0); Console.WriteLine(todosSonPares); // Salida: False
7.
Skip
yTake
– Paginación:Estos métodos se utilizan para realizar paginación en una colección.
var pagina1 = numeros.Skip(0).Take(5); // Elementos 1-5 var pagina2 = numeros.Skip(5).Take(5); // Elementos 6-10
Estos son solo algunos de los muchos métodos disponibles en LINQ. La versatilidad de LINQ permite realizar operaciones complejas de manera elegante y legible. Además, puedes combinar varios métodos para construir consultas más avanzadas y expresivas.
Aquí hay un ejemplo de cómo usar algunos de estos métodos de extensión:
List<string> nombres = new List<string> { "Juan", "Pedro", "María", "Ana", "Luis" };
// Obtener los nombres que empiezan con "M" y ordenarlos alfabéticamente
var nombresConM = nombres.Where(nombre => nombre.StartsWith("M")).OrderBy(nombre => nombre);
// Obtener los primeros dos nombres que empiezan con "A"
var nombresConA = nombres.Where(nombre => nombre.StartsWith("A")).Take(2);
// Obtener los nombres que no empiezan con "J" y saltar los primeros dos
var otrosNombres = nombres.Where(nombre => !nombre.StartsWith("J")).Skip(2);
En este ejemplo, hemos creado una lista de cadenas llamada nombres
y hemos usado los métodos de extensión Where
, OrderBy
, Take
y Skip
para consultarla. Primero, hemos usado el método Where
para obtener los nombres que empiezan con “M” y ordenarlos alfabéticamente. Luego, hemos usado el método Where
y el método Take
para obtener los primeros dos nombres que empiezan con “A”. Finalmente, hemos usado el método Where
y el método Skip
para obtener los nombres que no empiezan con “J” y saltar los primeros dos.