LINQ y ADO.NETLINQ and ADO.NET

En la actualidad, muchos desarrolladores empresariales deben usar dos (o más) lenguajes de programación: un lenguaje de alto nivel para los niveles de presentación y lógica C# empresarial (como Visual o Visual Basic) y un lenguaje de consulta para interactuar con la base de datos (como TRANSACT-SQL). .Today, many business developers must use two (or more) programming languages: a high-level language for the business logic and presentation layers (such as Visual C# or Visual Basic), and a query language to interact with the database (such as 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.This requires the developer to be proficient in several languages to be effective, and also causes language mismatches in the development environment. 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.For example, an application that uses a data access API to execute a query against a database specifies the query as a string literal by using quotation marks. Esta cadena de consulta es ilegible y no se comprueba si contiene errores, tales como una sintaxis no válida o si existen las columnas o las filas a las que hace referencia.This query string is un-readable to the compiler and is not checked for errors, such as invalid syntax or whether the columns or rows it references actually exist. No hay ninguna comprobación de tipo de los parámetros de consulta y tampoco hay compatibilidad con IntelliSense.There is no type checking of the query parameters and no IntelliSense support, either.

Language-Integrated Query (LINQ)Language-Integrated Query (LINQ) permite a los programadores formar consultas basadas en conjuntos en el código de su aplicación, sin tener que usar un lenguaje de consulta independiente.enables developers to form set-based queries in their application code, without having to use a separate query language. Se puede escribir consultas de LINQLINQ en 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.You can write LINQLINQ queries against various enumerable data sources (that is, a data source that implements the IEnumerable interface), such as in-memory data structures, XML documents, SQL databases, and DataSet objects. Aunque esos orígenes de datos enumerables se implementan de varias formas, todos revelan las mismas construcciones de lenguaje y sintaxis.Although these enumerable data sources are implemented in various ways, they all expose the same syntax and language constructs. 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.Because queries can be formed in the programming language itself, you do not have to use another query language that is embedded as string literals that cannot be understood or verified by the compiler. La integración de consultas en el lenguaje de programación también permite que los programadores de Visual Studio sean más productivos al proporcionar comprobación de sintaxis IntelliSensey tipos en tiempo de compilación, y.Integrating queries into the programming language also enables Visual Studio programmers to be more productive by providing compile-time type and syntax checking, and IntelliSense. Estas características reducen la necesidad de depuración y corrección de errores de consultas.These features reduce the need for query debugging and error fixing.

La transferencia de datos de las tablas de SQL a objetos de memoria a menudo es una tarea tediosa y propensa a errores.Transferring data from SQL tables into objects in memory is often tedious and error-prone. El LINQLINQ proveedor implementado por LINQ to DataSet LINQ to SQLLINQ to SQL y convierte los datos de origen IEnumerableen colecciones de objetos basadas en.The LINQLINQ provider implemented by LINQ to DataSet and LINQ to SQLLINQ to SQL converts the source data into IEnumerable-based object collections. El programador siempre ve los datos como una colección de IEnumerable cuando se realiza la consulta y la actualización.The programmer always views the data as an IEnumerable collection, both when you query and when you update. Se proporciona compatibilidad completa con IntelliSense para escribir consultas en esas colecciones.Full IntelliSense support is provided for writing queries against those collections.

Existen tres tecnologías Language-Integrated Query (LINQ)Language-Integrated Query (LINQ) de ADO.NET independientes: LINQ to DataSet, LINQ to SQLLINQ to SQL y LINQ to Entities.There are three separate ADO.NET Language-Integrated Query (LINQ)Language-Integrated Query (LINQ) technologies: LINQ to DataSet, LINQ to SQLLINQ to SQL, and LINQ to Entities. LINQ to DataSet proporciona consultas más enriquecidas DataSet y optimizadas sobre y LINQ to SQLLINQ to SQL permite consultar directamente esquemas de base de datos de SQL Server y LINQ to Entities le permite consultar una Entity Data Model.LINQ to DataSet provides richer, optimized querying over the DataSet and LINQ to SQLLINQ to SQL enables you to directly query SQL Server database schemas, and LINQ to Entities allows you to query an 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.The following diagram provides an overview of how the ADO.NET LINQ technologies relate to high-level programming languages and LINQ-enabled data sources.

Información general de LINQ to ADO.netLINQ to ADO.NET overview

Para obtener más información sobre LINQ, vea Language Integrated Query (LINQ).For more information about LINQ, see Language Integrated Query (LINQ).

En las secciones siguientes se proporciona más información acerca LINQ to SQLLINQ to SQLde LINQ to DataSet, y LINQ to Entities.The following sections provide more information about LINQ to DataSet, LINQ to SQLLINQ to SQL, and LINQ to Entities.

LINQ to DataSetLINQ to DataSet

DataSet Es un elemento clave del modelo de programación desconectado en el que se basa ADO.net y se usa ampliamente.The DataSet is a key element of the disconnected programming model that ADO.NET is built on, and is widely used. LINQ to DataSet permite a los desarrolladores crear capacidades de consulta más DataSet complejas en utilizando el mismo mecanismo de formulación de consultas que está disponible para muchos otros orígenes de datos.LINQ to DataSet enables developers to build richer query capabilities into DataSet by using the same query formulation mechanism that is available for many other data sources. Para más información, vea LINQ to DataSet.For more information, see LINQ to DataSet.

LINQ to SQLLINQ to SQL

LINQ to SQLLINQ to SQL es una herramienta útil para programadores que no requieren la asignación a un modelo conceptual.is a useful tool for developers who do not require mapping to a conceptual model. Si utiliza LINQ to SQLLINQ to SQL, puede usar el modelo de programación de LINQLINQ directamente en un esquema de base de datos existente.By using LINQ to SQLLINQ to SQL, you can use the LINQLINQ programming model directly over existing database schema. LINQ to SQLLINQ to SQLpermite a los desarrolladores generar .NET Framework clases que representan datos.enables developers to generate .NET Framework classes that represent data. 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.Rather than mapping to a conceptual data model, these generated classes map directly to database tables, views, stored procedures, and user-defined functions.

Con LINQ to SQLLINQ to SQL, los programadores pueden escribir código directamente en el esquema de almacenamiento usando el mismo patrón de programación de LINQLINQ que las recopilaciones en memoria y DataSet, además de otros orígenes de datos como XML.With LINQ to SQLLINQ to SQL, developers can write code directly against the storage schema using the same LINQLINQ programming pattern as in-memory collections and the DataSet, in addition to other data sources such as XML. Para más información, vea LINQ to SQL.For more information, see LINQ to SQL.

LINQ to EntitiesLINQ to Entities

La mayor parte de las aplicaciones se escriben actualmente utilizando bases de datos relacionales.Most applications are currently written on top of relational databases. En algún punto, estas aplicaciones tendrán que interactuar con los datos representados en un formato relacional.At some point, these applications will need to interact with the data represented in a relational form. 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.Database schemas are not always ideal for building applications, and the conceptual models of application are not the same as the logical models of databases. La Entity Data Model es un modelo de datos conceptual que se puede usar para modelar los datos de un dominio determinado para que las aplicaciones puedan interactuar con los datos como objetos.The Entity Data Model is a conceptual data model that can be used to model the data of a particular domain so that applications can interact with data as objects. Consulte ADO.NET Entity Framework para obtener más información.See ADO.NET Entity Framework for more information.

A través del modelo Entity Data Model, los datos relacionales se exponen como objetos en el entorno .NET.Through the Entity Data Model, relational data is exposed as objects in the .NET environment. Esto hace de la capa de objetos un objetivo idóneo para la compatibilidad con LINQLINQ, ya que permite a los programadores formular consultas en la base de datos con el lenguaje usado para compilar la lógica empresarial.This makes the object layer an ideal target for LINQLINQ support, allowing developers to formulate queries against the database from the language used to build the business logic. Esta funcionalidad se conoce como LINQ to Entities.This capability is known as LINQ to Entities. Para más información, vea LINQ to Entities.See LINQ to Entities for more information.

Vea tambiénSee also