LINQ e o ADO.NET

Atualmente, muitos desenvolvedores de negócios devem usar duas (ou mais) linguagens de programação: uma linguagem de alto nível para as camadas de lógica de negócios e de apresentação (como o Visual C# ou o Visual Basic), e uma linguagem de consulta para interagir com o banco de dados (como 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. 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. Essa cadeia de caracteres de consulta é ilegível para o compilador e os erros não são verificados, como sintaxe inválida ou se as colunas ou linhas referenciadas realmente existem. Não há nenhuma verificação do tipo dos parâmetros da consulta e também nenhum suporte do IntelliSense.

A consulta integrada à linguagem (LINQ) permite que os desenvolvedores formem consultas baseadas em conjuntos no código de seus aplicativos, sem precisar usar uma linguagem de consulta separada. Você pode escrever consultas LINQ com várias fontes de dados enumeráveis (ou seja, uma fonte de dados que implemente a interface IEnumerable), como estruturas de dados na memória, documentos XML, bancos de dados SQL e objetos DataSet. Embora essas fontes de dados enumeráveis sejam implementadas de várias maneiras, todas elas expõem as mesmas sintaxe e constructos de linguagem. 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. A integração de consultas na linguagem de programação também permite que os programadores do Visual Studio sejam mais produtivos fornecendo verificação de tempo de compilação e da sintaxe e o IntelliSense. Esses recursos reduzem a necessidade de depuração da consulta e de correção de erros.

A transferência de dados de tabelas SQL para objetos na memória é geralmente tediosa e sujeita a erros. O provedor LINQ implementado por LINQ to DataSet e LINQ to SQL converte os dados de origem em coleções de objetos baseadas em IEnumerable. O programador sempre exibe os dados como uma coleção de IEnumerable, quando você consulta e quando você atualiza. Suporte completo do IntelliSense é fornecido para escrever consultas nessas coleções.

Há três tecnologias LINQ (Consulta integrada à linguagem) do ADO.NET separadas: LINQ to DataSet, LINQ to SQL e LINQ to Entities. O LINQ to DataSet fornece consultas mais sofisticadas e otimizadas no DataSet, o LINQ to SQL permite que você confira diretamente os esquemas de banco de dados do SQL Server e o LINQ to Entities permite que você confira um Modelo de Dados de Entidade.

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.

LINQ to ADO.NET overview

Para obter mais informações sobre o LINQ, confira LINQ (Consulta Integrada à Linguagem).

As seções a seguir fornecem mais informações sobre o LINQ to DataSet, o LINQ to SQL e o LINQ to Entities.

LINQ to DataSet

O DataSet é um elemento chave do modelo de programação desconectado no qual o ADO.NET é baseado e é amplamente utilizado. O LINQ to DataSet permite que os desenvolvedores criem mais recursos de consulta sofisticados no DataSet usando o mesmo mecanismo de formulação de consulta que está disponível para muitas outras fontes de dados. Para obter mais informações, consulte LINQ to DataSet.

LINQ to SQL

O LINQ to SQL é uma ferramenta útil para os desenvolvedores que não requerem mapeamento para um modelo conceitual. Usando o LINQ to SQL, você pode usar o modelo de programação do LINQ diretamente sobre o esquema do banco de dados existente. O LINQ to SQL permite que os desenvolvedores gerem classes .NET Framework que representam dados. 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.

Com o LINQ to SQL, os desenvolvedores podem escrever código diretamente no esquema de armazenamento usando o mesmo padrão de programação do LINQ como coleções na memória e o DataSet, além de outras fontes de dados, como XML. Para obter mais informações, consulte LINQ to SQL.

LINQ to Entities

Atualmente, maioria dos aplicativos são escritos sobre bancos de dados relacionais. Em algum ponto, esses aplicativos precisarão interagir com os dados representados em um formulário relacional. 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. O Modelo de Dados de Entidade é um modelo de dados conceitual, que pode ser usado para modelar os dados de um domínio específico de modo que os aplicativos possam interagir com dados como objetos. Para obter mais informações, consulte ADO.NET Entity Framework.

Por meio do Modelo de Dados de Entidade, os dados relacionais são expostos como objetos no ambiente .NET. Isso torna a camada do objeto um destino ideal para o suporte do LINQ, permitindo que os desenvolvedores formulem consultas no banco de dados na linguagem usada para criar a lógica de negócios. Essa funcionalidade é conhecida como LINQ to Entities. Consulte LINQ to Entities para obter mais informações.

Confira também