Consulta de lenguaje integrado

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 2 de mayo de 2015; las comprobaciones requieren 20 ediciones .

Language Integrated Query (LINQ)  es un proyecto de Microsoft para agregar una sintaxis de lenguaje de consulta similar a SQL a los lenguajes de programación .NET Framework . Implementado previamente en C# y Visual Basic .NET . Muchos de los conceptos que presenta LINQ se probaron originalmente en el proyecto de investigación de Microsoft .

LINQ se lanzó con Visual Studio 2008 a fines de noviembre de 2007. Para crear y depurar rápidamente consultas LINQ, existe una utilidad especializada llamada LINQPad .

Características del lenguaje

Usando algunas funciones de lenguaje nuevas, LINQ le permite usar una sintaxis similar a SQL directamente en el código de un programa escrito, por ejemplo, en C#:

Fuentes de datos

Al admitir de forma nativa un motor de consulta para colecciones de objetos en memoria, bases de datos relacionales y datos XML , LINQ tiene una arquitectura extensible que permite a los desarrolladores externos acceder a sus almacenes de datos a través del motor LINQ. Para hacer esto, debe implementar operadores de consulta estándar mediante métodos de extensión o implementar la interfaz IQueryable , que le permite analizar el árbol de expresiones en tiempo de ejecución, traduciéndolo a su lenguaje de consulta. Hay un ejemplo de una implementación personalizada de operadores de consulta estándar en la comunidad. [una]

Por ejemplo, LINQ for SQL (anteriormente DLinq), que traduce expresiones LINQ en consultas SQL en una base de datos, utiliza la capacidad del compilador para crear un árbol de expresiones basado en el contexto del programa en lugar de crear funciones delegadas. Dado un árbol de expresión que describe una consulta, un proveedor de base de datos especializado puede analizarlo y traducirlo a una consulta en el idioma apropiado para la base de datos, como Microsoft SQL Server, Jet (que se usa en Microsoft Access) o cualquier otro. Algunos entusiastas ya han creado bibliotecas de prueba de concepto LINQ para consultar colecciones de datos WMI [2] , RSS , LDAP [3] , ADO.NET , Amazon Web Services [4] y SharePoint [5] utilizando esta táctica .

La versión preliminar actual de Microsoft también incluye una implementación de LINQ para XML (anteriormente llamado XLinq), que facilita mucho la creación y extracción de datos de un documento XML utilizando enfoques similares. Además, Microsoft está trabajando en ADO.NET vNext, también conocido como LINQ to Entities.

LINQ por tipos de fuentes de datos

LINQ a SQL

A finales de 2008, la responsabilidad del desarrollo de LINQ to SQL, junto con ADO.NET Entity Framework (incluido LINQ to Entities), se transfirió al equipo de desarrollo de ADO.NET (el llamado equipo de ADO.NET), mientras que anteriormente LINQ to SQL fue desarrollado por un equipo asociado con el desarrollo de un compilador para el lenguaje C# [6] . Por lo tanto, se hizo evidente que ambas soluciones tienen como objetivo resolver los mismos problemas y, por lo tanto, competirán entre sí. Un poco más tarde, Tim Mallalew aclaró que Microsoft continuaría desarrollando LINQ to SQL en función de los comentarios de los usuarios. Sin embargo, a partir de .NET 4.0, la solución recomendada es LINQ to Entities. Además, en función de las aportaciones de los usuarios, las características más utilizadas de LINQ to SQL se agregarán a LINQ to Entities [7] . Como resultado, habrá una fusión gradual de soluciones.

En general, los expertos apoyaron esta decisión. Entonces, por ejemplo, Marco Russo, aunque hizo una reserva de que pasar a LINQ to Entities no debería ser antes de que se convierta en un reemplazo completo de LINQ to SQL, sin embargo afirmó que combinar dos marcos parcialmente superpuestos es una buena idea, pero al mismo tiempo aquellos usuarios que están acostumbrados a usar partes "descartadas" de soluciones no deberían sufrir [6] .

LINQ a objetos

No es más que programación funcional disfrazada de sintaxis SQL [8] .

SQL Metal

La biblioteca LINQ incluye la herramienta SQLMetal, que le permite generar automáticamente clases directamente desde las bases de datos compatibles con .NET Framework, lo que facilita y agiliza la integración de entidades de base de datos en su código. Una alternativa es el diseñador de objetos relacionales incluido con Visual Studio, pero solo se puede usar con Microsoft SQL Server.

Ejemplo

// el tipo Northwind es un descendiente de DataContext creado por SQLMetal // el tipo Northwind.Orders es Table<Order> // el tipo Northwind.Customers es Table<Customer> Northwind db = new Northwind ( cadena de conexión ); // se usa la palabra clave 'var', ya que no hay nombre para el tipo // al que pertenece el resultado de la consulta var q = de o en db . Pedidos de c en db . Clientes donde o . Calidad == "200" && ( o . CustomerID == c . CustomerID ) seleccione nuevo { o . fecha de vencimiento , c . Nombre de la empresa , c . ID de artículo , c . Nombre del elemento }; // q se refiere a un objeto de tipo IEnumerable<T>, donde T es un tipo anónimo // generado por el compilador foreach ( var t en q ) { // t está fuertemente tipado aunque su tipo no tiene un nombre // conocido al escribir código consola _ WriteLine ( "DueDate Type = {0}" , t . DueDate . GetType ()); consola _ WriteLine ( "CompanyName (minúsculas) = ​​{0}" , t . CompanyName . ToLower ()); consola _ WriteLine ( "ItemID * 2 = {0}" , t . ItemID * 2 ); }

Véase también

Notas

  1. Una implementación personalizada de los operadores de consulta estándar de .NET de LINQ
  2. ¡Consulta tu WMI con facilidad usando WMILinq! - Thingamajig de Mielz (enlace descendente) . Consultado el 21 de junio de 2007. Archivado desde el original el 10 de abril de 2007. 
  3. Las historias de IQueryable - LINQ to LDAP - Parte 0: Introducción - B# .NET Blog
  4. Presentación de Linq en Amazon: weblog de Fabrice
  5. LINQ a SharePoint
  6. 1 2 LINQ to SQL frente a LINQ to Entities: decisiones del equipo de ADO.NET Archivado el 24 de enero de 2011.  (Inglés)
  7. ↑ Aclarando el mensaje sobre L2S Futures  
  8. LINQ como un paso hacia la programación funcional (Vlad Chistyakov, RSDN Magazine #2-2008)

Literatura

  • Adam Freeman, Joseph C. Ratts Jr. LINQ: Language Integrated Query en C# 2010 para profesionales = Pro LINQ: Language Integrated Query en C# 2010. - M .: Williams , 2011. - P. 656. - ISBN 978-5-8459-1701-0 .

Enlaces