LINQ
LINQ
Utilizando LINQ
Ahora vamos a comenzar a ver explicaciones con código.
Por ahora estaré utilizando la clase Program para enseñarles todos los ejemplos
que estaremos viendo.
IEnumerable y IQueryable
Cuando utilizamos LINQ debemos pensar en las estructuras de datos que
estaremos manipulando. Toda colección (agrupación de datos) que herede de la
interface IEnumerable o IQueryable en C# puede ser manipulada con LINQ.
Vamos a declarar una variable tipo int y otra variable de tipo string.
class Program
{
static void Main(string[] args)
{
string stringVariable;
int intVariable;
}
}
Luego de declarar las variables podremos hacer click + ctrl en la palabra string y
esto nos llevara a la clase de String en el “namespace” de “System”. Si
observamos esta clase podremos ver que hereda de la interface de IEnumerable,
a eso los quería llevar, siempre y cuando estén utilizando una estructura que
herede de IEnumerable o de IQueryable podremos utilizar LINQ sin embargo si
intentamos utilizarlo en la variable de tipo int la cual no hereda de esa
interface veremos que no tenemos los métodos de LINQ disponibles.
String
Int
Consultando datos
Habiendo visto eso, vamos a borrar esas dos variables que declaramos y vamos
a importar en la parte de arriba de nuestro Program.cs dos “namespaces”
using System.Collections.Generic;
using System.Linq;
Ahora en el método de main vamos a declarar una lista con nombres, vamos a
utilizar esta lista para filtrar por nombres específicos utilizando LINQ.
class Program
{
static void Main(string[] args)
{
var customerList = new List<string>
{
"Cliente 1",
"Cliente 2",
"Cliente 3"
};
var firstCustomer = customerList.Where(x => x ==
"Cliente 1").SingleOrDefault();
}
}
Como podemos ver en la línea de var firstCustomer =
customerList.Where(x => x == "Cliente
1").SingleOrDefault(); Estamos utilizando la palabra Where la cual utiliza
sintaxis de lambda para buscar en la lista por el nombre de Cliente 1 y a lo
último de la línea de código utilizamos el SingleOrDefault() para ejecutar
nuestra consulta. Esto nos traerá un el primer resultado que encuentre o nulo si
no encuentra nada.
Syntaxis
En el ejemplo que observamos arriba pudimos ver que la sintaxis que se utilizo
para hacer nuestra consulta es bien parecida al código que ya escribimos en C#,
LINQ tiene dos formas de ser escrito method syntax y query syntax. La sintaxis
que utilice el desarrollador va a depender de su preferencia.
Query Syntax
En la consulta que estoy haciendo en el ejemplo de Query Syntax podemos ver
que la sintaxis es muy parecida a la de SQL, estamos buscando en la lista de
persona por la persona con la edad de 24 años y seleccionando solamente su
nombre.
Filtrando datos
Como pudimos observar en las consultas anteriores, podemos filtrar utilizando
la palabra Where.
Agrupación
Podemos agrupar datos por campos que tengan en común. Por ejemplo en la
consulta a continuación podemos observar que estamos agrupando los datos
por edad, todas las personas que tengan la misma edad va a ser agrupadas en
los resultados y devueltos en una lista de personas.
Orden
Ordenar datos es sencillo, podemos ver que al
utilizar OrderBy u OrderByDescending podemos ordenar los datos de manera
ascendente o descendiente por el campo que queramos.
Select
Where
Nos permite seleccionar una colección a partir de otra con los objetos
que cumplan las condiciones especificadas:
First/Last
OrderBy
Sum
Max/Min
Average
All/Any
nos devolverá la lista de alumnos que tienen una nota superior a o igual
a 5, ordenados por nota ascendentemente.
Ventajas y desventajas
Ahora que hemos visto un poco por dónde pisamos, es hora de que
hablemos sobre las ventajas y desventajas que nos puede aportar
utilizar LINQ en vez de iterar las colecciones.
Por otro lado, las ventajas que nos aporta LINQ son principalmente
que el código es más legible, ya que utiliza una sintaxis muy declarativa
de lo que está haciendo, y sobre todo, nos ofrece una manera unificada
de acceder a datos, sean el tipo que sean, y tengan el origen que
tengan. Por ejemplo, podemos utilizar LINQ para trabajar con bases de
datos, con XML, con Excel, con objetos en memoria
Resumiendo