LINQ e o ADO.NETLINQ and ADO.NET

Hoje, muitos desenvolvedores de negócios devem usar duas (ou mais) linguagens de programação: uma linguagem de alto nível para a lógica de negócios e camadas de apresentação (como o Visual C# ou Visual Basic) e uma linguagem de consulta para interagir com o banco de dados (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). Isso exige que o desenvolvedor seja proficiente em várias linguagens para ser eficaz e também provoca incompatibilidades de linguagens no ambiente de desenvolvimento.This requires the developer to be proficient in several languages to be effective, and also causes language mismatches in the development environment. Por exemplo, um aplicativo que usa uma API de acesso a dados para executar uma consulta em um banco de dados especifica a consulta como um literal de cadeia de caracteres usando aspas.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. Essa cadeia de caracteres de consulta é ilegível para o compilador e não é verificada quanto a erros, como uma sintaxe inválida ou se as colunas ou linhas às quais ela faz referência realmente existem.This query string is unreadable to the compiler and is not checked for errors, such as invalid syntax or whether the columns or rows it references actually exist. Não há nenhuma verificação do tipo dos parâmetros da consulta e também nenhum suporte do IntelliSense.There is no type checking of the query parameters and no IntelliSense support, either.

O LINQ (consulta integrada à linguagem) permite que os desenvolvedores formem consultas baseadas em conjunto no código do aplicativo, sem precisar usar uma linguagem de consulta separada.Language-Integrated Query (LINQ) enables developers to form set-based queries in their application code, without having to use a separate query language. Você pode escrever consultas LINQ em várias fontes de dados enumeráveis (ou seja, uma fonte de dados que implementa a IEnumerable interface), como estruturas de dados na memória, documentos XML, bancos de dados SQL e DataSet objetos.You can write LINQ 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. Embora essas fontes de dados enumeráveis sejam implementadas de várias maneiras, todas elas expõem as mesmas sintaxe e constructos de linguagem.Although these enumerable data sources are implemented in various ways, they all expose the same syntax and language constructs. Como as consultas podem ser formadas na própria linguagem de programação, você não precisa usar outra linguagem de consulta que seja inserida como literais de cadeia de caracteres que não podem ser compreendidos ou verificados pelo compilador.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. A integração de consultas à linguagem de programação também permite que os programadores do Visual Studio sejam mais produtivos fornecendo o tipo de tempo de compilação e a verificação de sintaxe e IntelliSense .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. Esses recursos reduzem a necessidade de depuração da consulta e de correção de erros.These features reduce the need for query debugging and error fixing.

A transferência de dados de tabelas SQL para objetos na memória é geralmente tediosa e sujeita a erros.Transferring data from SQL tables into objects in memory is often tedious and error-prone. O provedor LINQ implementado por LINQ to DataSet e LINQ to SQLLINQ to SQL converte os dados de origem em IEnumerable coleções de objetos baseados em.The LINQ provider implemented by LINQ to DataSet and LINQ to SQLLINQ to SQL converts the source data into IEnumerable-based object collections. O programador sempre exibe os dados como uma coleção de IEnumerable, quando você consulta e quando você atualiza.The programmer always views the data as an IEnumerable collection, both when you query and when you update. Suporte completo do IntelliSense é fornecido para escrever consultas nessas coleções.Full IntelliSense support is provided for writing queries against those collections.

Há três tecnologias de LINQ (consulta integrada à linguagem) ADO.NET separadas: LINQ to DataSet, LINQ to SQLLINQ to SQL e LINQ to Entities.There are three separate ADO.NET Language-Integrated Query (LINQ) technologies: LINQ to DataSet, LINQ to SQLLINQ to SQL, and LINQ to Entities. O LINQ to DataSet fornece consultas mais ricas e otimizadas sobre o DataSet e LINQ to SQLLINQ to SQL permite que você consulte diretamente SQL Server esquemas de banco de dados e LINQ to Entities permite consultar um modelo de dados de entidade.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.

O diagrama a seguir fornece uma visão geral de como as tecnologias LINQ do ADO.NET estão relacionadas às linguagens de programação de alto nível e às fontes de dados habilitadas 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.

Visão geral do LINQ to ADO.NETLINQ to ADO.NET overview

Para obter mais informações sobre LINQ, consulte linguagem de consulta integrada (LINQ).For more information about LINQ, see Language Integrated Query (LINQ).

As seções a seguir fornecem mais informações sobre LINQ to DataSet, LINQ to SQLLINQ to SQL e 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

O DataSet é um elemento-chave do modelo de programação desconectado no qual o ADO.net é criado e é amplamente usado.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 que os desenvolvedores criem recursos de consulta mais avançados no usando DataSet o mesmo mecanismo de formulação de consulta que está disponível para muitas outras fontes de dados.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 obter mais informações, consulte LINQ to DataSet.For more information, see LINQ to DataSet.

LINQ to SQLLINQ to SQL

O LINQ to SQLLINQ to SQL é uma ferramenta útil para os desenvolvedores que não requerem mapeamento para um modelo conceitual.LINQ to SQLLINQ to SQL is a useful tool for developers who do not require mapping to a conceptual model. Usando LINQ to SQLLINQ to SQL o, você pode usar o modelo de programação LINQ diretamente sobre o esquema de banco de dados existente.By using LINQ to SQLLINQ to SQL, you can use the LINQ programming model directly over existing database schema. LINQ to SQLLINQ to SQL permite que os desenvolvedores gerem .NET Framework classes que representam dados.enables developers to generate .NET Framework classes that represent data. Em vez do mapeamento para um modelo de dados conceitual, essas classes geradas mapeiam diretamente para tabelas do banco de dados, modos de exibição, procedimentos armazenados e funções definidas pelo usuário.Rather than mapping to a conceptual data model, these generated classes map directly to database tables, views, stored procedures, and user-defined functions.

Com o LINQ to SQLLINQ to SQL , os desenvolvedores podem escrever código diretamente no esquema de armazenamento usando o mesmo padrão de programação LINQ que as coleções na memória e o, além de DataSet outras fontes de dados, como XML.With LINQ to SQLLINQ to SQL, developers can write code directly against the storage schema using the same LINQ programming pattern as in-memory collections and the DataSet, in addition to other data sources such as XML. Para obter mais informações, consulte LINQ to SQL.For more information, see LINQ to SQL.

LINQ to EntitiesLINQ to Entities

Atualmente, maioria dos aplicativos são escritos sobre bancos de dados relacionais.Most applications are currently written on top of relational databases. Em algum ponto, esses aplicativos precisarão interagir com os dados representados em um formulário relacional.At some point, these applications will need to interact with the data represented in a relational form. Os esquemas de banco de dados não são sempre ideais para criar aplicativos, e os modelos conceituais do aplicativo não são os mesmos que os modelos lógicos de bancos de dados.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. O Modelo de Dados de Entidade é um modelo de dados conceitual que pode ser usado para modelar os dados de um determinado domínio para que os aplicativos possam interagir com os dados 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. Para obter mais informações, consulte ADO.NET Entity Framework.For more information, see ADO.NET Entity Framework.

Por meio do Modelo de Dados de Entidade, os dados relacionais são expostos como objetos no ambiente .NET.Through the Entity Data Model, relational data is exposed as objects in the .NET environment. Isso torna a camada de objeto um destino ideal para o suporte a LINQ, permitindo que os desenvolvedores formulem consultas no banco de dados a partir da linguagem usada para criar a lógica de negócios.This makes the object layer an ideal target for LINQ support, allowing developers to formulate queries against the database from the language used to build the business logic. Essa funcionalidade é conhecida como LINQ to Entities.This capability is known as LINQ to Entities. Para obter mais informações, consulte LINQ to Entities.For more information, see LINQ to Entities.

Veja tambémSee also