La consulta integrada de lenguaje (LINQ) proporciona la capacidad de integrar sin problemas la sintaxis de consulta declarativa en lenguajes imperativos, principalmente C # y VB.NET. El desarrollo de LINQ resolvió los problemas que los desarrolladores que trabajaban en entornos orientados a objetos encontraban al realizar consultas. Se introdujo como parte de Microsoft® .NET Framework versión 3.5 en noviembre de 2007 y con el nombre en clave de Visual Studio® «Orcas».
Antes de la creación de consultas integradas de lenguaje, los lenguajes .NET no tenían una forma nativa de consultar bases de datos relacionales o documentos XML. Los desarrolladores que escribían en estos lenguajes tenían que incrustar SQL o XQuery respectivamente como cadenas y asignar manualmente los datos resultantes a los objetos .NET. Los compiladores de .NET no pudieron validar las cadenas de consulta y las asignaciones integradas, lo que permitió descubrir posibles errores en tiempo de ejecución.
Otro problema al que se enfrentaban los desarrolladores antes de la consulta integrada de lenguaje era que los lenguajes .NET solo tenían una sintaxis orientada a objeciones para consultar colecciones de objetos .NET. Normalmente, el desarrollador iteraría sobre una colección de fuentes completa, creando nuevas colecciones de resultados basadas en criterios de búsqueda. El desarrollador también podría transformar los datos mientras crea las colecciones de resultados. Este enfoque fue engorroso; una consulta de selección simple escrita en C # o VB requeriría al menos cinco líneas de código, mientras que la misma consulta requeriría una línea de código en un lenguaje de consulta.
Los desafíos de realizar consultas dentro de un entorno orientado a objetos le dieron a Microsoft el ímpetu para crear LINQ. LINQ proporciona una sintaxis de consulta que recuerda a SQL para ser utilizada en línea con C # o VB, completa con verificación de tipos estáticos. Al consultar colecciones .NET, en lugar de usar bucles anidados, los desarrolladores pueden usar la sintaxis LINQ para seleccionar elementos y transformar datos. Entre otras ventajas, esto da como resultado menos líneas de código en comparación con la sintaxis puramente orientada a objetos.
Al acceder a fuentes de datos externas, LINQ y los componentes de soporte eliminan la necesidad de lenguajes de consulta integrados y asignaciones de datos dentro de un lenguaje .NET en sí. Para realizar el mapeo de datos, LINQ depende de componentes llamados proveedores LINQ. LINQ-to-Objects es el proveedor de valores que permite a LINQ acceder a las colecciones .NET. Del mismo modo, existen proveedores para acceder a bases de datos relacionales y documentos XML. La mayoría de estos proveedores son componentes de terceros no incluidos en .NET Framework. Independientemente del proveedor utilizado, todas las consultas utilizan la misma sintaxis LINQ.
Entre la sintaxis de consulta integrada del lenguaje y los proveedores hay una biblioteca de operadores de consulta agregada a .NET Framework como parte de las funciones de LINQ. Estos operadores realizan tareas como filtrar, ordenar, operaciones de teoría de conjuntos y agregación. Como estos operadores son parte de .NET Framework, también se pueden usar sin LINQ si el desarrollador así lo decide.