LINQ o Language Integrated Query son un conjunto herramientas de Microsoft para realizar todo tipo de consultas a distintas fuentes de datos: objetos, xmls, bases de datos, etc… Para ello, usa un tipo de funciones propias, que unifica las operaciones más comunes en todos los entornos, con esto, se consigue un mismo lenguaje para todo tipo de tareas con datos.
LINQ nace en el Framework 3.5 y pronto coge una gran aceptación entre el mundo de .net, tanto es asi, que enseguida salen proveedores de terceros, para el uso de este lenguaje con JSON, CSVs, o inclusos APIs como la de Twitter y Wikipedia.
LINQ en C#
La sintaxis es parecida a la existente en SQL, pero con la ventaja de que tenemos la potencia de .net y visual studio a la hora de codificar. Ahora vamos a ver un sencillo ejemplo, con una consulta linq en c# para objetos (LINQ to objetcs):
var lista = from c in coleccion where c.propiedad1 == true select c;
Como podemos ver, accedemos a una colección y filtramos todos los elementos que cumplan que la propiedad 1 sea verdadera. Del resultado de esta consulta, podemos sacar un listado de elementos con ToList(), el número de ellos con un count(), extraer los datos a un array, etc…
LINQ en vb.NET
La sintaxis básica es parecida en vb.net en este tipo de sentencias, pero para mi gusto menos cómoda cuando las sentencias se van complicando y sobre todo cuando haces uso de metodos directos empleando expresiones lambda. Pero antes, veamos en que consiste este tipo de metodos.
Operadores Lambda
Aparte del metodo anterior para acceder a las operaciones de LINQ, podemos hacer uso de una sintaxis más directa a la hora de interactuar con LINQ. Esto puede hacerse mediante expresiones de metodos apoyados por operadores lambda. Con ella, podemos llamar directamente a funciones where, join, select, directamente desde el objeto.
var lista_resultado = lista.where(c => c.id > 5).OrderBy(c => c);
En solo una linea de código, hemos cogido un listado, lo hemos filtrado con una condición, y finalmente hemos ordenado los resultados.
Ejecución retardada
Cuando declaramos una consulta en LinQ, podemos retardar su ejecución. La consulta del ejemplo anterior, ha sido en declarada en una variable anónima. Al no haber sido usada en ninguna instrucción posterior, y no haber forzado su carga mediante el metodo ToList(), Select(), First(), etc… la consulta queda declarada pero no lanzada. Esto puede ser contraproducente de no controlarse bien, pero a la vez puede ser muy útil en ciertos escenarios.
Te esperamos en los siguientes artículos en donde hablaremos mas acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.