ASP. NET - Apresentando LINQ - Language Integrated Query


O que é LINQ ?

- LINQ - Language integrated Query - é um conjunto de recursos introduzidos no .NET Framework 3.5 que permitem a realização de consultas diretamente em base de dados , documentos XML , estrutura de dados , coleção de objetos ,etc. usando uma sintaxe parecida com a linguagem SQL.

Atenção você precisa do Visual Studio 2008 ou o Visual Web Developer 2008 Express (.NET Framework 3.5) instalado.

Nota: Faça o download das versões Express no link: http://www.microsoft.com/express/product/default.aspx

Chegaram as versões finais do Visual Studio 2008 e do .Net Framework 3.5.

Com mais de 250 novas funcionalidades, o Visual Studio 2008 oferece melhorias significativas
em cada uma das suas versões – incluindo o Visual Studio Express e Visual Studio Team System. 
 

O que você esta esperando ????

 

Esquema representando o LINQ - Ref: http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx

Existem cinco formas nas quais poderemos utilizar o LINQ.

O que LINQ to SQL ?

LINQ to SQL é uma implementação específica to LINQ para o SQL Server que converte consultas escritas em C# ou Visual Basic em SQL dinâmico , provendo uma interface que permite mapear os objetos do banco de dados gerando as classes para realizar as operações usando a sintaxe LINQ; também permite realizar alterações nos objetos e atualizar o banco de dados. (Vamos abordar este tema em outro artigo...)

Como eu uso LINQ no meu código ?

1- Você deve usar o Visual Studio 2008 ou Visual Basic 2008 Express (.NET Framework 3.5)
2- Incluir uma referência ao namespace System.Data.Linq.dll ;
3- Incluir a seguinte declaração no topo da sua classe: using System.Data.Linq ou imports Syste.Data.Linq
4- Referenciar o LINQ no seu projeto através do template - LINQ To SQL classes

O que eu ganho usando LINQ ?

Para saber mais sobre o LINQ veja os artigos já publicados:

Usando LINQ

Vamos a parte prática ...

Neste primeiro contato com o LINQ vamos mostrar como acessar as informações de um array, e, usando a sintaxe do LINQ efetuar operações para selecionar e ordenar as informações da fonte de dados.

Você vai precisar do Visual Basic 2008 Express Edition. (Veja como obter em: .NET - Visual Studio 2008 e versões Express LIBERADAS)

Abra o VB 2008 Express e no menu File selecione New Project. A seguir escolha o template Windwos Forms Application e informe o nome usandoLINQ;

No formulário padrão form1.vb inclua dos controles Label, e Button definindo o seguinte leiaute;

Vamos definir um array de números inteiros conforme a linha de código abaixo:

Dim numeros() As Integer = {1, 7, 4, 2, 91, 12, 23, 37, 42, 100, 5, 13, 290, 55, 13, 80}

Agora no evento Click do primeiro botão de comando inclua o código abaixo:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


Dim
todosNumeros = From numero In numeros

txtLINQ.Text =
""


For
Each numero In todosNumeros

    txtLINQ.Text += numero.ToString + " "

Next

 

End Sub

- Na primeira linha , definimos um array chamado numeros() contendo os números inteiros indicados;

- Preste atenção nesta linha de código:  Dim todosNumeros = From numero In numeros

Esta é a declaração LINQ que usamos para obter os números do array.

Olhando melhor a declaração você não se recorda de nada ? Vou ajudá-lo...

Não parece uma declaração da linguagem SQL ??? (Note a cláusula From; Você verá a seguir que as cláusulas Order By, Where , Select , etc também são usadas no LINQ.)

Pois é isso mesmo. A LINQ apresenta uma sintaxe usada nas linguagens funcionais como a SQL de forma tornar mais intuitiva o acesso aos dados.

Veja que no exemplo não usamos a cláusula SELECT , mas ela esta implícita e a declaração poderia ser escrita também da seguinte forma:

Dim todosNumeros = From numero In numeros SELECT numero

Perceba também que a lógica da declaração esta invertida em relação a usada na linguagem SQL.

SQL  Select numero From Numeros
LINQ  From numero in numeros Select numero

Um dos motivos desta inversão de ordens é  o uso recurso IntelliSense, pois quando você indica primeiro a origem dos dados ele pode mostrar as listas de membros de tipos nos objetos em sua coleção. Outro motivo , segundo Anders Hejlsberg , seria que esta ordem esta mais próxima da nossa lógica de pensamento. Quando você digita uma instrução SQL iniciando com Select na verdade você já esta pensando na origem dos dados , condições , agrupamentos. etc.

A cláusula From é a mais importante do LINQ To SQL pois é usada em todas as consultas. Uma consulta deve sempre começar com From. (O Select pode estar implícito o From não.)

No evento Click do segundo botão de comando inclua o código abaixo:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


Dim todosNumeros = From numero In numeros Where numero > 50 Order By numero

txtLINQ.Text = ""

For Each numero In todosNumeros

    txtLINQ.Text += numero.ToString + " "

Next

 

End Sub

- Na primeira linha , definimos um array chamado numeros() contendo os números inteiros indicados;

- Preste atenção nesta linha de código:  Dim todosNumeros = From numero In numeros
                                                                                           Where
numero > 50
                                                                                           Order By Numero  

- A consulta LINQ  inicia com a cláusula From e em seguida usa o operador de condição Where e depois efetua ordenação com o operador Order By ;

Percebeu que no código definimos uma variável chamada numero do tipo integer ? O tipo esta sendo inferido pelo compilador pois não esta declarado no código.

A variável todosNumeros também esta sendo inferida como sendo do tipo Sytem.Collections.Generic.IEnumeralbe(Of Integer);

Este é um dos novos recursos do .NET Framework 3.5 , a inferência de tipos, que ocorre quando não há declaração explícita do tipo do objeto e o compilador descobre e atribui o tipo correto ao objeto declarado; é o que acontece neste caso.

Executando o projeto iremos obter:

O resultado da execução do projeto para cada um dos botões clicados.

Vamos mostrar algo mais prático. Que tal acessar as informações do sistema de arquivos usando LINQ ?

Com o LINQ podemos ter acesso a qualquer fonte de informações esteja ela em formato de array, coleções, banco de dados, listas, etc.

Vamos então acessar o sistema de arquivos e exibir as informações dos arquivos do diretório atual do nosso projeto em um componente DataGridView.

No mesmo projeto inclua um novo formulário , form2.vb , e inclua os componentes DatagridView e Button conforme o leiaute abaixo;

A seguir no evento Click do botão de comando inclua o código abaixo:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

 

Dim arquivos = From arquivo In My.Computer.FileSystem.GetFiles(CurDir) _

                      Order By arquivo _

                      Select arquivo

 

Dim arquivoInfo = From arquivo In arquivos _

                          Select My.Computer.FileSystem.GetFileInfo(arquivo)

 

Dim detalhesInfo = From arquivo In arquivoInfo


Me
.DataGridView1.DataSource = detalhesInfo.ToList

 

End Sub

 

No código temos três declarações LINQ:

1-  A primeira obtêm a relação dos arquivos do diretório atual via recurso My;

Dim arquivos = From arquivo In My.Computer.FileSystem.GetFiles(CurDir) _

                      Order By arquivo _

                      Select arquivo

2- A segunda obtêm informações sobre os arquivos

Dim arquivoInfo = From arquivo In arquivos _

                          Select My.Computer.FileSystem.GetFileInfo(arquivo)

 

3- A terceira obtêm detalhes das informações dos arquivos;

 

Dim detalhesInfo = From arquivo In arquivoInfo

 

Executando o projeto iremos obter:

 

 

Como você pode notar usando LINQ pudemos realizar a tarefa de obter informações do sistema de arquivos de uma forma declarativa e intuitiva. As possibilidades são enormes tanto para a utilização do LINQ como na integração dos recursos do LINQ com aplicações WPF.

Pegue o projeto completo aqui:  usandoLINQ.zip

Eu sei é apenas .NET mas eu gosto ...


Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#
 

   Gostou ?   Compartilhe no Facebook    Compartilhe no Twitter

Referências:


José Carlos Macoratti