Olá a todos, hoje vou falar-vos de LINQ (Language Integrated Query).
Para que serve?
Este componente da Framework .NET 3.0 foi criada para colmatar a grande dificuldade de se executarem querys contra uma BD, isto porque como teríamos de o fazer com strings era muito frequente existirem erros nem que fosse só uma vírgula ou uns parênteses em falta.
Por essa razão já há muito tempo existe o Hibernate para Java e o nHibernate para .NET que proporcionam uma Framework objecto / relacional, que tem como função passar os objectos de uma Base de dados para objectos da linguagem de programação evitando assim erros de escrita pois temos acesso no intelissense a todos os objectos da tabela.
Para fazer “frente” a isso a Microsoft criou os Typed Datasets que são iguais aos datasets de que já aqui falámos mas que são conhecidos em “design time”, ou seja, podemos arrastar visualmente tabelas da Base de dados para o Visual Studio, o que vai fazer com que seja possível conhecer e interagir com a base de dados como se fosse uma classe criada por nós.
E aí entra a magia do LINQ que nos permite fazer querys a esses objectos de uma maneira simples e parecida com a sintaxe SQL. Com a chegada do Linq chegaram também os tipo de dados implícitos.
O que são?
Até ao momento em linguagens não dinâmicas como o C# a única forma de criarmos uma variável de que ainda não sabemos o tipo era se definíssemos o tipo como Objecto (porque todos os tipos derivam de objecto), agora com a chegada do linq temos acesso a tipos de dados implícitos e ao tipo “VAR” que permite ao compilador inferir qual o tipo dados a utilizar. O linq pode ser utilizado em tudo, desde Arrays, Objectos, Bases de dados, XML, etc…
LINQ providers:
Para um melhor manuseamento de certas funções o linq foi dividido em vários providers.
LINQ to Objects:
Permite fazer querys a objectos em memória como arrays.
LINQ to XML:
Como o nome indica permite criar, modificar e navegar por ficheiros XML
LINQ to SQL:
Permite fazer querys a uma BD SQLSERVER.
Nota: Só funciona com MSSQLSERVER.
LINQ to DataSets:
Este provider permite fazer tudo o que os outros fazem e sem as limitações de BD, ou seja, tanto se pode estar ligado a SQL como ORACLE.
Vamos aos exemplos.
Fazendo querys a um simples array de strings:
Esta query devolve todos os itens no array de strings. Para extrair o resultado temos de fazer um ciclo foreach
Esta query já só irá devolver os nomes com apenas 5 caracteres
Para extrair os valores faz-se novamente um ciclo foreach Query em que só devolve nomes em que a primeira letra seja um “A”
Nestes exemplos vamos fazer querys a uma classe Carro criada por mim.
Criamos um array de Carros e na query filtramos e mostramos apenas os carros que tenham tecto de abrir. Como podem ver temos acesso a todas as propriedades da classe Carro (marca, valor) e os seu tipo de dados é mantido.
Podemos também ordenar os resultados ou agrupa-los por camadas.
Como o principal propósito do LINQ não são querys a este tipo de objectos mas sim a tabelas de uma base de dados, no projecto adicionei uma base de dados e um Typed DataSet
Este dataset é composto por duas tabelas Clientes e Encomendas em que existe uma relação por ID do cliente. Para podermos utilizar o LINQ temos de primeiro, instância o dataset e depois criar as instâncias dos tableAdapters(Data Adapters) que com o método Fill() irão preencher as nossas tabelas com os dados da BD.
Depois é só fazer querys normalmente com o Linq.
Com esta query obteremos todas as encomendas do cliente com o ID = 1
Bom e por hoje é tudo espero que tenham gostado e qualquer dúvida já sabem é só escrever aí em baixo porque eu gosto de ler. Para a semana teremos algo de muito soft: vou mostrar-vos como fiz o meu primeiro programa se é que se pode chamar isso, é um leitor de música e rádio muito prático e simples de se fazer.
Cumprimentos a todos e boa programação.