LINQ - Curso Prático e rápido I


Antes do advento do LINQ - Language Integrated Query - escrever código para realizar uma consulta a uma fonte de dados , geralmente um banco de dados relacional, exigia o conhecimento da linguagem SQL e a montagem de uma instrução de consulta que era enviada a fonte de dados onde seria executada, o que resultava na separação da funcionalidade e controle entre a aplicação e os dados.

A LINQ permite a realização de consultas a qualquer fonte de dados onde os dados podem ser vinculados a partir de múltiplas e variadas fontes como banco de dados relacionais, arquivos XML , etc. Para saber mais sobre LINQ consulta a seção LINQ do site.( LINQ )

O objetivo desta série de artigos é mostrar como usar o LINQ na prática para realizar as tarefas básicas do dia a dia de um programador. Então vamos lá...

Em todos os exemplos eu vou usar o Visual Basic 2008 Express Edition usando um projeto do tipo console para mostrar o exemplo da consulta LINQ. A criação de um projeto console é feita da seguinte forma:(Eu estarei usando a versão traduzida para o Português sempre que possível)

Definindo os passos básicos para criação dos projetos usados nos exemplos

1- Abra o Visual Basic 2008 Express Edition e no menu Arquivo selecione Novo -> Projeto:(New-> Project)

2- Em seguinda , na janela Novo Projeto (New Project) selecione o modelo (Template) Aplicativo do Console e informe o nome:

3- Agora vamos excluir o arquivo Module1.vb e no menu Projeto(Project) selecionar a opção Adicionar novo item...(Add New Item)

4- Na janela Adicionar Novo Item (Add New Item) selecione o modelo(template) Classe (Class) e informe o nome;

5- Em todos os exemplos vou usar o namespace Macoratti.LINQ.ExemploX (onde X é o numero do exemplo)

6- Em todos os exemplo vou usar o método Shared Sub Main() para executar o código principal da classe criada;

Estes são os passos básicos que serão usados em todos os exemplos desta série de artigos sobre LINQ.

1- Realizando uma consulta em uma coleção Genérica

Objetivo - efetuar uma consulta a objetos em uma coleção genérica usando LINQ to Objects.

O LINQ to Objects, representado pelo namespace Sytem.Linq ,extende o framework LINQ e fornece o mecanismo para consultar dados armazenados em objetos que herdam de IEnumerable(Of T).

Exemplo:  Dim consulta = From nome in nomes

onde nomes é um tipo IEnumerable(Of String).

Nesta consulta a cláusula From esta estruturada como um laço For...Next onde você especifica a variável a ser usada na iteração, no caso a variável nome, e a fonte dos dados, a variável nomes.

Observe que não foi preciso definir o tipo de dados do iterador pois ele pode ser inferido a partir do tipo de dados da fonte e da mesma forma o tipo de dados do resultado, consulta, também esta sendo inferido.

A inferência de tipos é um recurso usado pela LINQ mas você não é obrigado a usá-lo se não quiser podendo escrever a mesma consulta da seguinte forma:

Dim consulta As IEnumerable(Of String) = From nome As String In nomes Select nome

Vai funcionar mas a inferência de tipos torna a consulta mais limpa e fácil de ler.

Obs: Para mais detalhes veja o meu artigo: LINQ - Conceitos básicos e fundamentos

Se você não quiser valores duplicados use a cláusula Distinct:

Dim consulta = From nome in nomes Distinct

A sintaxe usada é conhecida como query syntax mas quando o código é compilado esta sintaxe é traduzida e compilada para a method syntax que no caso acima seria:

Dim consulta = nomes.Distinct

Como exemplo prático vamos realizar uma consulta obtendo informações dos objetos Process e retornando os processos que estão rodando na máquina local.

Crie uma aplicação console usando o Visual Basic 2008 Express Edition, conforme definido no início do artigo:

Para este exemplo vamos usar os seguintes namespaces:

Imports System
Imports System.Linq
Imports System.Diagnostics

Após criar a classe conforme indicado no início do artigo , defina o seguinte código na classe Linq_Ex1:

Namespace Macoratti.LINQ.Exemplo1

    Public Class Linq_Ex1

        Public Shared Sub Main()
            ' constroi uma consulta para retornar os processos 
            ' rodando na maquina local
            ' Os dados serão retornados como instâncias da classe Process
            Dim consultaProcessos = From processo In Process.GetProcesses
            ' Executa a consulta gerada e itera sobre o resultado
            For Each processo In consultaProcessos
                Console.WriteLine(processo.ProcessName)
            Next
            ' aguarda... 
            Console.WriteLine()
            Console.WriteLine("Pressione Enter para continuar.")
            Console.ReadLine()
        End Sub

    End Class

End Namespace

Executando o projeto teremos:

Vemos a facilidade com acessamos os objetos e os exibimos na nossa aplicação. Ponto para a LINQ.

Aguarde mais artigos desta série : LINQ - Curso Prático e rápido.

Eu sei é apenas LINQ, mas eu gosto...

Referências:


José Carlos Macoratti