LINQ y ADO.NET

Actualmente, muchos programadores empresariales deben usar dos (o más) lenguajes de programación: un lenguaje de alto nivel para las capas de presentación y lógica empresarial (como Visual C# o Visual Basic) y un lenguaje de consulta para interactuar con la base de datos (como Transact-SQL). Esto requiere que el programador tenga conocimientos de varios idiomas para ser efectivo y también causa discrepancias de idiomas en el entorno de desarrollo. Por ejemplo, una aplicación que utiliza API de acceso a datos para ejecutar una consulta en una base de datos especifica la consulta como un literal de cadena usando comillas. El compilador no puede leer esta cadena de consulta y no se comprueba si contiene errores, tales como una sintaxis no válida o si existen realmente las columnas o las filas a las que se hace referencia. No hay ninguna comprobación de tipo de los parámetros de consulta y tampoco hay compatibilidad con IntelliSense.

Language-Integrated Query (LINQ) permite a los desarrolladores formar consultas basadas en conjuntos en el código de su aplicación, sin tener que usar un lenguaje de consulta independiente. Puede escribir consultas de LINQ para varios orígenes de datos enumerables (es decir, un origen de datos que implementa la interfaz IEnumerable), como estructuras de datos en memoria, documentos XML, bases de datos SQL y objetos DataSet. Aunque esos orígenes de datos enumerables se implementan de varias formas, todos revelan las mismas construcciones de lenguaje y sintaxis. Como las consultas se pueden formar en el lenguaje de programación mismo, no es necesario utilizar otro lenguaje de consultas que esté incrustado como literales de cadena que el compilador no pueda entender o comprobar. La integración de las consultas en el lenguaje de programación también permite a los programadores de Visual Studio ser más productivos, ya que proporciona comprobación de sintaxis y tipos en tiempo de compilación e IntelliSense. Estas características reducen la necesidad de depuración y corrección de errores de consultas.

La transferencia de datos de las tablas de SQL a objetos de memoria a menudo es una tarea tediosa y propensa a errores. El proveedor de LINQ implementado por LINQ to DataSet y LINQ to SQL convierte los datos de origen en colecciones de objetos basadas en IEnumerable. El programador siempre ve los datos como una colección de IEnumerable cuando se realiza la consulta y la actualización. Se proporciona compatibilidad completa con IntelliSense para escribir consultas en esas colecciones.

Hay tres tecnologías independientes de Language Integrated Query (LINQ) para ADO.NET: LINQ to DataSet, LINQ to SQL y LINQ to Entities. LINQ to DataSet proporciona consultas más ricas y optimizadas en objetos DataSet, LINQ to SQL permite consultar directamente los esquemas de bases de datos de SQL Server y LINQ to Entities permite consultar un Entity Data Model.

El siguiente diagrama proporciona una visión general de cómo se relacionan las tecnologías ADO.NET LINQ con lenguajes de programación de alto nivel y orígenes de datos habilitados para LINQ.

LINQ to ADO.NET overview

Para más información sobre LINQ, consulte Language Integrated Query (LINQ).

En las secciones siguientes, se proporciona más información sobre LINQ to DataSet, LINQ to SQL y LINQ to Entities.

LINQ to DataSet

El objeto DataSet es un elemento fundamental del modelo de programación desconectada en el que se basa ADO.NET y se usa ampliamente. LINQ to DataSet permite a los desarrolladores crear funcionalidades de consulta más ricas en objetos DataSet mediante el uso del mismo mecanismo de formulación de consultas que está disponible para muchos otros orígenes de datos. Para más información, vea LINQ to DataSet.

LINQ to SQL

LINQ to SQL es una herramienta útil para los desarrolladores que no requieren la asignación a un modelo conceptual. Si utiliza LINQ to SQL, puede usar el modelo de programación de LINQ directamente en un esquema de base de datos existente. LINQ to SQL permite a los desarrolladores generar clases de .NET Framework que representan datos. En lugar de la asignación a un modelo de datos conceptual, esas clases generadas se asignan directamente a tablas de bases de datos, vistas, procedimientos almacenados y funciones definidas por el usuario.

Con LINQ to SQL, los desarrolladores pueden escribir código directamente para el esquema de almacenamiento usando el mismo patrón de programación de LINQ que para las colecciones en memoria y el objeto DataSet, además de otros orígenes de datos como XML. Para más información, vea LINQ to SQL.

LINQ to Entities

La mayor parte de las aplicaciones se escriben actualmente utilizando bases de datos relacionales. En algún punto, estas aplicaciones tendrán que interactuar con los datos representados en un formato relacional. Los esquemas de base de datos no siempre son ideales para crear aplicaciones y los modelos conceptuales de aplicación no son iguales que los modelos lógicos de bases de datos. Entity Data Model es un modelo de datos conceptual que se puede usar para crear un modelo de los datos de un dominio en particular para que las aplicaciones puedan interactuar con los datos como objetos. Para obtener más información, vea el Entity Framework de ADO.NET.

A través del modelo Entity Data Model, los datos relacionales se exponen como objetos en el entorno .NET. Esto hace de la capa de objetos un objetivo idóneo para la compatibilidad con LINQ, ya que permite a los programadores formular consultas en la base de datos con el lenguaje usado para compilar la lógica empresarial. Esta funcionalidad se conoce como LINQ to Entities. Para más información, consulta LINQ to Entities.

Consulte también