A través del tiempo, el desarrollo y todo el conjunto de herramientas tecnológicas que lo componen han tenido continuos avances, es algo de nunca acabar, siempre surge la forma de cómo mejorar lo existente, en esto también hace parte la necesidad de innovar, crecer, crear y hacer que los ambientes para los desarrolladores sean cada vez más eficientes, concisos y óptimos.  Sin irnos tan lejos, en el desarrollo de .NET y de manera mas precisa en el ámbito de operaciones de consulta, filtración, escritura, entre otros, el ambiente se torno algo difícil, porque si queríamos realizar alguna de estas operaciones en fuentes de datos como bases de datos SQL, ficheros XML, servicios web, colecciones fuertemente tipadas, etc., era necesario aprender un lenguaje de consulta diferente para cada uno, lo que nos resultaba algo engorroso, y a pesar de hacerlo, el código realizado llegaba a contener fallas e inclusive podía ser poco compresible.

Por tales razones y otras más, la creación de LINQ en .NET Framework fue necesaria y actualmente este lenguaje de consulta nos ayuda enormemente, ya que gracias a él podemos reducir la distancia existente entre el mundo de los datos y el mundo de los objetos; además como LINQ es un lenguaje que trabaja con objetos nos permite usar los mismos patrones básicos de codificación tanto para consultar como transformar datos en cualquier tipo de origen de datos como los que nombre anteriormente y todos aquellos que tengan como proveedor a LINQ.

esquema linq

Bueno, ya sabemos que es LINQ y para que funciona en el ambiente del desarrollo .NET, pero ahora es importante que sepamos como usar lo teórico en lo práctico, para esto es necesario partir de que son las consultas y cómo funcionan en LINQ, sin embargo, cabe resaltar que en el transcurrir del blog observaremos algunos ejemplos y la manera de cómo mejorar la interacción con LINQ al momento de realizar operaciones de consulta. Comencemos.

Como dije anteriormente, LINQ es un lenguaje de consultas, por ende, vamos a necesitar una expresión de consulta para realizar las operaciones que deseemos construir. Las expresiones de consulta están construidas en lenguaje de primera clase y se expresa en sintaxis de consulta valga la redundancia; se usan ya sea para consultar o para transformar los datos de cualquier origen de datos habilitado para LINQ; mediante esta sintaxis de consulta se pueden realizar varias operaciones, entre ellas, el filtrado, ordenación, agrupamiento de datos y muchas otras más.

Para comenzar con lo práctico, tenemos este ejemplo de muestra donde lo que hice fue devolver una colección de cadenas que contenían la palabra “LINQ”. Seguido del ejemplo me pareció necesario mostrar la estructura con la que cuenta una expresión de consulta.

Ejemplo de sintaxis de consulta en C#

sintaxis de consulta

Estructura de la sintaxis de consulta LINQ

Estructura de la sintaxis de consulta

Teniendo en cuenta el ejemplo anterior, ya podemos entrar a manejar algo más práctico, un poco más real, esto lo hacemos mediante una lista de estudiantes, en la cual incorpore datos como la ID, el nombre y la edad de los estudiantes. Para esta ocasión quise que mi consulta encontrara todos los jóvenes adolescentes en el rango de edad de 12 años a 20 años. Sin embargo, también hubiera podido agrupar mis estudiantes teniendo en cuenta su edad, o quizás ordenarlos de manera alfabética. Pero este tipo de operaciones las veremos más adelante.

Cabe aclarar que después de la cláusula from se pueden usar diferentes operadores de consulta como filtrar, agrupar y unir elementos de una colección, existen aproximadamente 50 operadores de consulta que se pueden usar para construir el resultado deseado.

Ejemplo de aplicación sintaxis de consulta LINQ.

aplicación sintaxis de consulta

Como dije en el ejemplo anterior, yo hubiera podido ordenar o agrupar los datos de mi lista como yo quisiera, para esto es necesario el uso de las siguientes operaciones:

Filtrado

Este operador se comporta como booleano, se encarga de devolver los elementos para los que la expresión es verdadera. En este caso como lo hice en mi ejemplo, busco filtrar o encontrar los alumnos con edad entre 12 y 20 años.

filtrado

Ordenación

Este operador hace que la secuencia o grupo devuelta se ordene de manera ascendente o descendente. Cabe aclarar que para este operador el orden ascendente esta por defecto. Para esta operación dispuse que el orden se diera de manera descendente, es decir, los estudiantes estarán organizados por su nombre en orden de Z-A.

ordenacion

Agrupar

Este operador se encarga de devolver un grupo de elementos de la colección dada según la clave que se especifique. Como en el siguiente ejemplo donde se crean grupos con los estudiantes que tengan la misma edad.

agrupar

Para ir acabando, lo realizado con sintaxis estándar se puede tratar de una manera distinta y mas directa al momento que deseemos interactuar con LINQ, esto se puede hacer mediante el uso de la maravillosa como peligrosa Expresión Lambda. Mediante la expresión lambda podremos llamar directamente a funciones como where, join, select, entre otras directamente desde el objeto.

Ejemplo con expresiones Lambda

lambda

Acá tenemos un ejemplo de expresión Lambda, donde lo que hice fue una consulta de filtrado que encontrara el estudiante cuya ID fuera igual a 5.

expresion lambda

Así como esta consulta y las del ejemplo se pueden hacer más, solo va a depender de lo que el desarrollador quiera consultar.

Como primera instancia y pequeña aproximación a esta tecnología de consultas, creo que ha estado bien, aun así, teniendo en cuenta que solo estamos mirando una introducción, que la información y documentación relacionada a LINQ es extensa, que los métodos que se pueden encontrar con este lenguaje de consulta son demasiados, que se pueden incorporar expresiones lambda y que se integra con Entity Framework, debo decir que el estudio de esta importante herramienta deberá continuar.

Leonardo Pirajan
Consultor Técnico Junior
Attomo Group