Popular channels

Linq, un lenguaje de consultas que marca diferencias










@BrianBordalejo





Introducción al Post:



Buenas amigos de Taringa! Espero estén muy bien.Luego de no postear algo por un tiempo,decidí crear uno,en esta ocasión sobre un lenguaje que me llamo la atención.La verdad es que no lo he utilizado en su totalidad,pero es muy útil.

¿Qué veremos en el Post? El lenguaje LINQ,su definición,funciones y demás.Espero que les sirva en algún momento y el post sea de su agrado. Comencemos:




¿LINQ? ¿Qué es?


Sí buscamos su definición en Google y/o Wikipedia,nos saldrá lo siguiente:



Como podemos ver en la imagen,LINQ o Language Integrated Query es un componente de la plataforma .NET

El mismo tiene capacidades de consulta a datos y demás.Por ello mismo,se lo define como un lenguaje de consultas,tiene muchos implementaciones más,las cuales veremos más adelante en el post.




En caso de que no hayas entendido muy bien,te explicare de una forma más detallada o técnica:

Language Integrated Query es un lenguaje de consultas creado para facilitar la explotación de los datos sin importar el tipo de fuente de datos utilizada. Permite consultar información en tecnologías tan diferentes como ficheros XML, bases de datos relacionales o colecciones fuertemente tipadas.





LINQ extiende el lenguaje a través de las llamadas expresiones de consulta, que son parecidas a las sentencias SQL y pueden ser usadas para extraer y procesar convenientemente datos de arrays, clases enumerables, documentos XML, bases de datos relacionales y fuentes de terceros.

Otros usos, que utilizan expresiones de consulta como plataforma general para la composición de expresiones más legibles, incluyen la construcción de manejadores de eventos.




Más datos sobre LINQ




En Noviembre del 2007 junto con el lanzamiento de .NET Framework 3.5 se presentó LINQ , como una de las novedades de ésta Release. Muchas de las características de LINQ fueron originalmente probadas con el lenguaje creado por Microsoft Research denominado Cω.

LINQ además define un conjunto de nombres de métodos,son usadas por el compilador para traducir las expresiones de consulta en expresiones normales del lenguaje

LINQ proporciona de forma nativa la capacidad de realizar consultas al estilo SQL desde el propio lenguaje de forma agnóstica al propio sistema de almacenamiento, es decir que tanto podemos utilizar sobre orígenes o conjuntos de datos relacionales como objetos almacenados en memoria así como un amplio abanico de proveedores que van desde documentos XML hasta NHibernate pasando por Twitter o Amazon.





Arquitectura de LINQ en .NET


Select:

Realiza una proyección de la colección y selecciona los aspectos deseados de los elementos. El usuario especifica una función arbitraria, como un delegado o una expresión lambda, que es la que proyecta los elementos.




Where:

Permite la definición de un conjunto de predicados que son evaluados para cada objeto en la colección, de manera que los objetos que no cumplan el predicado son excluidos del resultado. El predicado se especifica al operador como un delegado.




SelectMany:

Mapea de elementos de una colección a colecciones. Semánticamente, se realizan dos pasos. Primero, cada elemento se mapea a su colección correspondiente. Después, el resultado del primer paso se mezcla en un mismo nivel. Select y Where son ambos implementables usando SelectMany.




Sum / Min / Max / Average:

Estos operadores reciben un parámetro opcional lambda, que toma un valor de cada elemento en la colección y lo usa para encontrar la suma, el mínimo, el máximo o el promedio respectivamente de todos los elementos en la colección.




Aggregate:

Una versión generalizada de Sum/Min/Max. Este operador recibe una expresión lambda que especifica cómo serán combinados los

valores para formar un resultado intermedio o final.




Join:

Realiza un inner join entre dos colecciones, basado en llaves coincidentes para los objetos de cada colección. Recibe dos funciones como delegados, una para cada colección, que se ejecutará sobre cada elemento de la colección para extraer su llave.




GroupJoin:

Al igual que el anterior pero realiza un GroupJoin.




Take / TakeWhile:

El operador Take selecciona los n primeros objetos de una colección, mientras que el operador TakeWhile, que recibe un

predicado, selecciona solo los n primeros objetos que cumplan con este.




Skip / SkipWhile:

Son los complementos de Take y TakeWhile respectivamente, se ignoran los primeros n elementos o los primeros n que cumplan el predicado especificado.




Concat:

Concatena dos colecciones.




OfType:

Para seleccionar solo los elementos de cierto tipo.

Hay más aún,pondré esas hasta el momento,para que el post no se haga muy extenso para ustedes.




Creando la estructura


La forma más simple que nos podemos encontrar al hacer consultas LINQ es realizar las query contra un colección tipada, que sea iqueryable. En este ejemplo vamos a realizar primero la carga de los datos en una lista y después vamos a realizar varios tipos de selección.


Voy a utilizar un proyecto ASP.net, en C# y con Webform. Y lo primero es construir la estructura que voy a utilizar para almacenar los datos




A continuación construyo la clase que me va a crear y llenar de datos una colección IQueryable, que será a la que le realice las consultas LINQ.





Lanzando consultas


Ahora sí, me voy a la clase principal de la página, y en el método On_Load añado las diferentes consultas. Como por ejemplo el seleccionar el primer registro que su nombre sea igual a Juan.



Podemos destacar:

  • Su similitud de sintaxis con una consulta SQL

Si en vez de traerme un solo objeto del tipo persona, me traigo una colección, tengo dos opciones.

O declararlo de forma completa en el tipo de la variable que recoge el resultado o utilizar otra facilidad del framework, que son los tipos implícitos. Y que se declaran del tipo var.





Aquí obtendríamos una colección con dos objetos persona. Uno por cada uno de los que tuvieran el apellido Bordalejo.

Y aquí podemos darle una pequeña vuelta a la tuerca y decirle que, además, me los traiga ordenados por su edad.





Es más, este resultado lo puedo utilizar, a su vez, para seguir tratando la información.

Por ejemplo buscar seleccionar dentro de los Bordalejo, aquellos cuyo nombre contenga una cadena específica,





Para ir acabando, todo lo que estoy haciendo con una sintaxis “estandar”, lo puedo hacer por las tan maravillosas como peligrosas expresiones lambdas.

Como una primera y breve aproximación a esta tecnología de consultas, esta muy bien. La documentación y la literatura es muy amplia y variada. Teniendo en cuenta que solo estamos rascando en la superficie, que los métodos en linq son muchos, que se pueden utilizar expresiones lambda, que se integra de forma perfecta con el ORM Entities Framework y que es plenamente extensible; podemos decir sin duda que aquí hay para estudiar un rato largo.


Otra cosa que no he de olvidar, es que el número de proovedores no para de crecer. Además del mencionado XML y SQL server, existen proveedores para aplicar LINQ en PHP, en JavaScript, o en Twiter





LINQ to Objects



El término "LINQ a objetos" se refiere al uso de consultas LINQ con cualquier colección IEnumerable o IEnumerable directamente, sin usar un proveedor o una API de LINQ intermedios.

Puede usar LINQ para consultar cualquier colección enumerable, como List, Array o Dictionary. La colección puede ser definida por el usuario o puede haber sido devuelta por una API de .NET Framework.

Básicamente, LINQ a objetos representa un nuevo enfoque a las colecciones. En el sistema antiguo, tenía que escribir complejos bucles foreach que especificaban cómo recuperar los datos de una colección. En el enfoque LINQ, se escribe código declarativo que describe qué quiere recuperar.




Este código,es un claro ejemplo de LINQ a objetos.




LINQ to XML



LINQ to XML proporciona una interfaz de programación XML en memoria que aprovecha las características de .NET

LINQ to XML utiliza las características más recientes del lenguaje .NET Framework y es comparable a una actualizada y rediseñada interfaz de programación XML para el Modelo de objetos de documento (DOM).







LINQ to DataSet


El proveedor de LINQ to SQL sólo funciona con bases de datos de Microsoft SQL Server. Para soportar cualquier base de datos genérica, LINQ también incluye LINQ to DataSet, que utiliza ADO.NET para manejar la comunicación con las base de datos.

Una vez que los datos están en DataSets de ADO.NET, LINQ to DataSet ejecuta las consultas sobre estos datasets.

LINQ to DataSet facilita y acelera las consultas en datos almacenados en caché en un objeto DataSet. En concreto, LINQ to DataSet simplifica la consulta permitiendo a los desarrolladores escribir consultas a partir del lenguaje de programación mismo, en lugar de utilizar un lenguaje de consulta diferente.

Esto resulta especialmente útil para desarrolladores de Visual Studio, que ahora pueden aprovechar la comprobación de sintaxis en tiempo de compilación, los tipos estáticos y la compatibilidad con IntelliSense que proporciona Visual Studio en las consultas.






Otras implementaciones de LINQ


Para ir finalizando el post,veremos otras implementaciones que tiene este lenguaje.No las veremos tan detalladamente,será más que nada nombrarlas,para así no se hace tan extenso el post.

jLinq

jLinq es una librería de JavaScript totalmente extensible que permite realizar consultas estilo LINQ en arrays de objetos.






jLink-node

Implementación para NodeJS.




JSINQ

Es la implementación de Kai Jäger de LINQ to Objects para JavaScript. También proporciona un compilador que traduce expresiones de consulta estilo LINQ en código JavaScript.




Phinq

Es una implementación para PHP de LINQ por Tommy Montgomery.






PHPLinq

Es una implementación para PHP de LINQ por Maarten Balliauw.




Quaere

Implementación para Java de LINQ.




Embarcadero Prism, también conocido como Delphi Prism, admite LINQ.



JaQue

Implementación para Java de LINQ.






Fin del Post


Ha llegado el fin del post,espero que les sea útil y les haya gustado el post.Sí tienen sugerencias,recomendaciones,ect,envíenme un MP o comenten en el post

Saludos a todos!






+1
33
0
33Comments
      Sole9202

      Buen aporte !!! 🔟

      0
      sam77sam77

      De que estas hablando ??????? Necesitas ayuda profesional !!!! ja ja ja a Fav Reco y van +10. Creo que ya no me quedan puntos. Saludos.

      0
      elprofeta

      Super reco!

      0
      gran_lince

      Sumale un Diego de este Gran Lince 😏

      0
      academiapy

      😉 👍

      0
      3_patas

      +10 🤘

      0
      helgistar

      Buen post recomendado

      0
      guachon_12

      No se podía esperar otra cosa de vos Brian! Muy buen post! Saludos

      0
      George-8

      Tremenda info. Amigo pero mi cerebro no logra captar una sola palabra 😁
      Mis respetos muchachito 😉

      0
      El_nahuel_Pa

      aguante java, no me importa nada!

      0
      DrRocco

      linq, no lo conozco!!

      0
      Camaron_
      • 10 master y te sigo
      0
      dani_el_aleman

      Justo en este momento estoy haciento un trabajo practico en MVC de la facultad usando linq... (Y)

      0
      TheBannedUserTwo

      muy bueno loco, tengo un pedo atomico con sql, pero muy bueno.

      0
      LinogeCBA

      Nada como el GORM de Grails.

      0
      Pundush

      tiene sus ventajas como un ORM, es mas creo que es la alternativa de JPA para .NET,

      para las empresas como las que yo trabajo es importante utilizar este tipo de herramientas que brindan agilidad y mejor control de persistencia de objetos. utilizando las bondades de Entities en .NET puedes conseguir mejores resultados

      0
      xluucia

      Que raro ver un post asi. ¿No le habras pifiado de pagina? 😁
      Linda info! 😊

      0
      Soy_leyenda00

      Buen post, muy buena info.

      0
      desbrozado

      Buen post, recomendado +10 😁

      0
      skull1478963

      no me gustan los lenguajes mocosoft

      0
      NooManhattan

      Ventajas sobre SQL?

      0
      ronald_morales

      buen post, soy DBA y linq es una buena herramienta para la plataforma .net, tambien podes probar Hibernate o NHibernate que es tambien para .net, para el mapeo de bases de datos

      0
      Juantopol

      Lei hasta que vi .net

      0
      elprofeta

      Exelente Brian dejo un combo.

      0
      cuervoua

      Buenísimo, te dejo +10 para que parezca que entiendo algo 😁

      0
      Info_Set

      Muy Buen Post, estas cosas tienen que abundar mas por aca !!

      Gracias !!

      0
      joakinabedolla

      Yo apenas empiezo con la programación, asi que no entiendo mucho, pero gracias por el aporte 👍

      0
      CosmeFulanito08

      En mi laburo vi unas consultas de Linq hacia la base que eran gigantes y mataban servidores, al final las pasaron a stores y anduvo joya. Tengan cuidado, para cosas chica anda de 10.

      0
      NightPrincess

      Buen aporte, excelente informacion,,,,,,gracias por compartir......+10 + Reco

      0
      FuneralBrute

      Me queda rendir base de datos para terminar programacion , y no entiendo una mier** de SQL Server.

      0
      andresveron

      Muy buena info, gracias por el aporte! +10

      0
      RAUL_09

      Me duele la cabeza!!! jaja 10+

      0
      rocky0095

      Excelente Post! estas Reloco 🆒 +10

      0