LINQ e 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 Visual C# ou Visual Basic) e uma linguagem de consulta para interagir com o banco de dados (como Transact-SQL). Isso requer que o desenvolvedor seja proficiente em várias linguagens para ser eficaz, e também causa incompatibilidades de linguagem 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 não é verificada quanto a erros, como sintaxe inválida ou se as colunas ou linhas às quais ela faz referência realmente existem. Não há verificação de tipo dos parâmetros de consulta e também não há IntelliSense suporte.

O LINQ (Language-Integrated Query) permite que os desenvolvedores formem consultas baseadas em conjuntos em seu código de aplicativo, sem precisar usar uma linguagem de consulta separada. 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. Embora essas fontes de dados enumeráveis sejam implementadas de várias maneiras, todas elas expõem a mesma sintaxe e construções de linguagem. Como as consultas podem ser formadas na própria linguagem de programação, não é necessário usar outra linguagem de consulta incorporada 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 tipo e sintaxe em tempo de compilação, e IntelliSense. Esses recursos reduzem a necessidade de depuração de consultas e correção de erros.

A transferência de dados de tabelas SQL para objetos na memória é muitas vezes tediosa e propensa a erros. O provedor LINQ implementado pelo LINQ to DataSet e LINQ to SQL converte os dados de origem em coleções de objetos baseadas em IEnumerable. O programador sempre vê os dados como uma IEnumerable coleção, tanto quando você consulta quanto quando você atualiza. Suporte total IntelliSense é fornecido para escrever consultas nessas coleções.

Existem três tecnologias ADO.NET Language-Integrated Query (LINQ) separadas: LINQ to DataSet, LINQ to SQL e LINQ to Entities. O LINQ to DataSet fornece consultas mais ricas e otimizadas sobre o e o LINQ to SQL permite que você consulte diretamente esquemas de banco de dados do SQL Server, e o DataSet LINQ to Entities permite consultar um Modelo de Dados de Entidade.

O diagrama a seguir fornece uma visão geral de como as tecnologias ADO.NET LINQ se relacionam com linguagens de programação de alto nível e fontes de dados habilitadas para LINQ.

LINQ to ADO.NET overview

Para obter mais informações sobre o LINQ, consulte Language Integrated Query (LINQ).

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

LINQ para DataSet

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

LINQ para SQL

LINQ to SQL é uma ferramenta útil para desenvolvedores que não precisam de mapeamento para um modelo conceitual. Usando LINQ to SQL, você pode usar o modelo de programação LINQ diretamente sobre o esquema de banco de dados existente. O LINQ to SQL permite que os desenvolvedores gerem classes do .NET Framework que representam dados. Em vez de mapear para um modelo de dados conceitual, essas classes geradas são mapeadas diretamente para tabelas de banco de dados, exibições, 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 LINQ que as 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 para Entidades

A maioria dos aplicativos é atualmente escrita em cima de bancos de dados relacionais. Em algum momento, esses aplicativos precisarão interagir com os dados representados em um formulário relacional. Os esquemas de banco de dados nem sempre são ideais para a criação de aplicativos, e os modelos conceituais de 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 para 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 de objeto um destino ideal para o suporte ao LINQ, permitindo que os desenvolvedores formulem consultas no banco de dados a partir da linguagem usada para criar a lógica de negócios. Esse recurso é conhecido como LINQ to Entities. Para obter mais informações, consulte LINQ to Entities.

Consulte também