Tutorial C# – LINQ
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
Download: Teste Entity [140.53KB]
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.
Licença: Freeware
Sistemas Operativos: Windows XP/Vista/Win7
Download: Windows Forms Application [18.37KB]
Homepage: Peopleware
Este artigo tem mais de um ano
Excelente artigo Henrique. Parabéns.
—–
http://nocontinues.net/ – Os jogos que interessam
Muito interessante este tópico!
Bom artigo 🙂 se bem que eu não uso isso propriamente assim contra bases de dados, mas sao formas de programar 😉
@ Henrique sabes alguma coisa de WPF integrado com Windows integrated authentication?
Muito interessante. Eu que até trabalho intensivamente com C# nunca tinha trabalhado com esse componente que vem de facto eliminar muitos erros de sintaxe nas querys. Excelente. Continua o bom trabalho.
@Shogun
Para ser sincero foram raras as vezes que mexi em WPF, foi mesmo só para ver a tecnologia, de momento as windows forms e a web já me dão a volta á cabeça 🙂
Ainda estou a espera do teu post da Entity Framework.
@Todos
Obrigado. E sim o LINQ veio em muito ajudar a resolver aqueles erros irritantes em que temos de fazer debug para ver que nos esquecemos da virgula.
Muito bom tutorial vai dar muito jeito. 🙂
Alguem pode-me diser onde utilizo isto ? onde fasso para construir ? sou novo nisto e queria entregrar-me.. e n sei onde fasso isto..
Muito interessante. Parabéns!
@Henrique Graça,
Bom post, o linq é sem duvida uma tecnoligia bastante boa e favoravel. Mas penso que deverias ter feito um exemplo de Xlinq.. ou seja em xml pois a tecnologia de .net que permite navegar entre nos de xml é bastante “chata”.
@José Rui
Isto é utilizado no visual studio 2008 (sendo que o 2005 não tem a tecnologia linq).
Só falta mesmo o LINQ to Sql, em que o Entity Model trata de tudo o que é ligações à bd, e cria logo a classes referentes às tabelas, para quem trabalha apenas em .NET / MSSQLSERVER é um grande “poupador” de tempo
Bom material
Boas,
Excelente artigo antes de mais.
Só uma questão pessoal: apesar de a tecnologia LINQ dar imenso jeito, não vos faz confusão assim ao principio ver instruções SQL no meio de C# ? A mim fez-me imenso ao principio…
@ricardo.. desde k simplifique o meu codigo a microsoft esta a vontade pra me fazer confusao! 😀
mas nao nao fez.. porque estou habituado a trabalhar com sql e ja vi mto codigo com sql la pro meio
Isto até seria bom se eu entendesse algo.
@Vic
Este é o mundo maravilhoso dos programadores. 🙂
E o mundo confuso que muita gente que usa qualquer computador/ Mac se intereça. xD
“Para quê estar intereçado em toda a programação por trás de um simples botao, quando posso clicar nele? :D”
E essa pergunta muitas vezes nem é feita. 🙂
Nós temos de entender meio mundo, para conseguir criar uma aplicação, quer seja para a web quer para o pc, que funcione de agrado com os requesitos ddo utilizador; e muitas vezes nao é fácil.
As pessoas apenas querem clicar no botao, que a máquina faça uma “jantarada do caraças”! 😀
Dica bastante intereçante. 😉
Programador em Delphi / Pascal.
Compreendo.
Eu também não me imaginava a criar o meu site e já sei como, se calhar até posso, no futuro, criar software.
“Para quê estar intereçado em toda a programação por trás de um simples botao, quando posso clicar nele? :D”
Se não houver ninguém a criar não há software. Eu não crio por falta de conhecimento, não de vontade.
Muito bom o artigo. Faltou citar mais 2 providers muito importantes: LINQ to Entity (Entity Framework) e o LINQ to REST (WebServices REST como os gerados pelo ADO.Net Data Services).
Hoje em dia praticamente só faço queries em coleções de objetos usando linq (independente da origem dos dados) e como muitos podem pensar, a queries misturadas ao código o fazem muito mais legível do que vários loops aninhados para atingir o mesmo objetivo.
Por exemplo :
var paresmaioresque100 = from n in numeros where n % 2 == 0 && n > 100 select n;
é bem mais legível que:
var paresmaioresque100 = new List();
foreach n in numeros
{
if (n % 2 == 0 && n > 100)
paresmaioresque100.add(n)
}
ps.: a coleção ‘numeros’ é uma lista de inteiros (List) com qualquer conteúdo (somente para exemplo).
Muito bom tutorial!! Parabéns!! Eu estou a ver este tutorial.
@Bruno
Bem observado.
@Henrique ja informei no forum mas n deves ter visto, ja tenho o webcast pronto, pedeme o meu mail no foram em pm.
Caro amigo. Para já parabens pelos seus tutorial e muito obrigado. Tenho um problema para resolver e tomei a liberdade de lhe colocar a seguinte questão. Preciso de colocar televisão num projecto de c# e não sei como o meu obrigado desde já.
Desde já, parabéns pelo tutorial.
Sou novata neste mundo de C#, quando na empresa perguntaram se conhecia algo de LINQ, resolvi pesquisar de imediato e como venho de um mundo de C++ e de SQL, isto é muito porreiro e útil.
Este tutorial é bastante simples e exemplifica os aspectos fundamentais, (básicos), penso eu.
Agradeço desde já. Muitos PArabéns
Parabéns e obrigado pela publicação deste post
na query6 deve se acessar com a variável que foi atribuído ou com “into valores”