LINQ (Language Integrated Query)

Technorati Tags: ,,,

Mudámos de casa – visitem o novo site em www.istomesmo.com

image

O LINQ é constituído por vários “providers” (fornecedores), ao estilo do que já estávamos habituados para o Membership ou para o Profile. Os providers que vêm de origem permitem efectuar consultas sobre xml, objectos e obviamente SQL.

Neste post vou demonstrar um exemplo do uso do LINQ para consultar a famosa base de dados Northwind.

Vamos começar por criar uma nova web application no Visual Studio 2008 denominada “LINQDemo”.
Nesta aplicação vamos adicionar um novo item do tipo “LINQ to SQL Classes”, que vamos denominar de “Northwind.dbml”.

image

Este ficheiro vai “gerar” uma representação em objectos de elementos da base de dados, que é vulgarmente conhecido como ORM (Object Relational Mapping).
Depois de criado, temos uma interface em branco, onde nos é sugerido, para criarmos classes, arrastando objectos da Toolbox ou do ServerExplorer. Estas classes serão a representação dos dados na base de dados.

image

Vamos então arrastar a tabela Products e a tabela Categories da base de dados Northwind, a partir do Server Explorer, que como podem ver na imagem anterior, já está aberto do lado direito.

(Se necessitarem de informação de como configurar a base de dados Northwind, enviem-me um email para blog.istomesmo@gmail.com ou deixem um comentário)

image

Como podemos ver na imagem anterior, todas as definições das tabelas são reconhecidas, incluindo as suas chaves, e até as relações entre tabelas. Agora basta-nos guardar o ficheiro acabado de criar.

Neste momento já temos estas duas tabelas da base de dados com uma representação por objectos.
Vamos agora dar início à consulta de dados nestas tabelas. Para isso vamos adicionar uma GridView à Default.aspx. Nesta GridView podemos escolher um dos estilos predefinidos.

image

Já temos o interface para apresentar os nossos dados, por isso, vamos passar para o code behind da página. No Page_Load, vamos dizer que queremos listar todos os produtos da base de dados. Primeiro vamos definir o contexto, ou seja , indicar em que base de dados é que queremos efectuar a consulta. Este NorthWindDataContext foi gerado quando criámos o ficheiro Northwind.dbml.
Depois de termos o contexto, vamos efectuar a query (consulta). Uma query é sempre uma variável não tipada, pois não sabemos quais os dados que serão devolvidos pela mesma.

A sintaxe do LINQ tem algumas semelhanças com o SQL, mas funciona de modo inverso, ou seja, primeiro temos o “from” e só depois o “select”. Uma das razões para que o LINQ funcione desta forma é o intellisense, pois só desta forma podemos ter intellisense em toda a query, pois já sabemos qual o sítio(tabela) em que vamos efectuar a consulta, e assim, intellisense consegue dar as hipóteses correctas.

Na consulta que desejamos efectuar, queremos todos os produtos (p) da tabela Produtos (Products) do contexto indicado (database).

image

No final da query, basta fazermos o databind dos dados para a gridview, e teremos todas as propriedades da tabela produtos a serem apresentadas na gridview.

image

Por tras de tudo isto, o LINQ está a gerar SQL para aceder à base de dados e obter os dados que nós definimos na query. Para vermos o SQL gerado, podemos adicionar mais um comando ao Page_Load.

image

Se corrermos a página novamente, antes da GridView, vamos ver o SQL utilizado pelo LINQ para obter os valores apresentados.

image

Neste caso trata-se de um SELECT simples.

Vamos agora alterar o nosso código para devolver apenas o produtos que façam parte de uma categoria que contenha no seu nome “con”.

image

Como podem ver pelo código necessário, facilmente conseguimos efectuar um join de tabelas, de uma forma simples.

image

Apenas os produtos que fazem parte das categorias 2 e 3 são devolvidos. Reparem no SQL gerado pelo LINQ.

Se apenas quiséssemos obter o nome do produto e a respectiva categoria, bastava-nos alterar a query para:

image

Assim na GridView obteríamos:

image

Como podemos ver, o LINQ permite-nos aceder rapidamente aos dados, de uma forma simples, com intellisense, e através de uma query tipada, em que os possíveis erros de sintaxe são validados na altura da compilação, fazendo com que consigamos descobrir os erros mesmo antes de testar o código.

Em posts futuros, voltarei a falar sobre este novo modelo de programação, o LINQ.

Deixem as vossas opiniões sobre o LINQ, gostaria muito de saber o que acham, se já usam, se estão a pensar usar, etc…

 

 

3 Respostas

  1. […] » LINQ (Language Integrated Query) […]

  2. […] LINQ (Language Integrated Query) « Isto Mesmo O LINQ é constituído por vários “providers” (fornecedores), ao estilo do que já estávamos habituados para o Membership ou para o Profile. Os providers que vêm de origem permitem efectuar consultas sobre xml, objectos e obviamente SQL. (tags: istomesmo.wordpress.com 2007 mes11 dia21 at_tecp Linq ASP.NET C# blog_post) […]

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

%d bloggers like this: