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