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”.
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.
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)
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.
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).
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.
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.
Se corrermos a página novamente, antes da GridView, vamos ver o SQL utilizado pelo LINQ para obter os valores apresentados.
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”.
Como podem ver pelo código necessário, facilmente conseguimos efectuar um join de tabelas, de uma forma simples.
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:
Assim na GridView obteríamos:
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…
Artigos que também lhe podem interessar:
2 Pings a “LINQ (Language Integrated Query)”
Uma Resposta a “LINQ (Language Integrated Query)”
-
1. Rui Lima Diz:
Janeiro 17th, 2008 s 16:50muito bom!




Novembro 27th, 2007 s 0:31
[...] » LINQ (Language Integrated Query) [...]
Dezembro 21st, 2007 s 20:41
[...] 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) [...]