Noçoes de LINQ

1,080 views

Published on

Apresentação sobre Language Integrated Query

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,080
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
25
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Noçoes de LINQ

  1. 1. Language Integrated Query (Fundamentos)
  2. 2.  Consiste em um modelo de programação unificado para extrair e atualizar dados de diferentes fontes de dados . Desta forma, é possível criar consultas a partir de uma coleção, um banco de dados e utilizar uma sintaxe conhecida, como o C#, por exemplo.
  3. 3. Existem 3 diferentes operações de consulta LINQ:  Obter a origem de dados;  Criar a consulta;  Executar a consulta; A origem de dados pode ser um array, uma coleção, um documento XML, um banco de dados ou um objeto que suporte Ienumerable etc.
  4. 4. No exemplo a seguir , a origem de dados é uma coleção: int[] num = new int[11] {0,1,2,3,4,5,6,7,8,9,10} ; var obj = from p in num where p > 5 select p; A cláusula “from” define a origem de dados: var obj = from p in num “where” filtra: where p > 5 Os operadores condicionais “OR”: where p == 5 || p == 6 e “AND” também podem ser usados: where p == 5 && p == 6
  5. 5. A cláusula “select” aparece no final e executa a consulta: var obj = from p in num where p > 5 select p; Caso queira exibir campos específicos, defina as propriedades que contêm os dados como por exemplo: var produtos = from p in db.Produtos select new { p.CategoriaID, p.ProdutoNome, p.PrecoUnitario }; Para executar, use uma instrução for ou foreach. Exemplo: int[] num = new int[11] {0,1,2,3,4,5,6,7,8,9,10} ; var obj = from p in num where p > 5 select p; foreach(var item obj) { Response.Write(item + “<br/>”); }
  6. 6. Podemos exibir as informações em um controle DataGridView: //Retorna uma lista de produtos ordenados em ordem crescente pelo nome var produtos = from p in db.Produtos orderby p.ProdutoNome select p; //Retorna uma lista de produtos ordenados em ordem decrescente pelo nome var produtos = from p in db.Produtos orderby p.ProdutoNome descending select p; DataGridView.DataSource = produtos; Se preferir retornar imediatamente as informações especificadas na consulta use: var produtos = (from p in db.Produtos select p).ToList(); var produtos = (from p in db.Produtos select p).ToArray();
  7. 7. Caso queira retornar, como por exemplo, apenas os 10 primeiros produtos que possuem o Id maior do que 15 e ordenados pelo Nome: var produtos = (from p in db.Produtos where p.ProdutoID > 15 orderby p.ProdutoNome select p).Take(10); Para agrupar elementos, use a cláusula “group”: var produtos = from p in db.Produtos group p by p.CategoriaID into grupo from item in grupo select new { item.CategoriaID, item.ProdutoID, item.ProdutoNome, item.PrecoUnitario };
  8. 8. Funçoes de pesquisa • Contains : Pesquisa na respectiva propriedade o texto declarado. Corresponde ao ‘LIKE’ nas expressões SQL. Exemplo (retornar todos os produtos que contém a expressão “guaraná” em seu nome): var produtos = from p in db.Produtos where p.ProdutoNome.Contains(“guaraná”) select p ; • StartsWith : Pesquisa pelo início da expressão. Exemplo (retornar todos os produtos que iniciam com a letra “a”): var produtos = from p in db.Produtos where p.ProdutoNome.StartsWith(“a”) select p ; • EndsWith : Pesquisa pelo final da expressão. Exemplo (retornar todos os produtos que terminam com a letra “a”): var produtos = from p in db.Produtos where p.ProdutoNome.EndsWith(“a”) select p ;
  9. 9. • FirstOrDefault : Quando se faz uma pesquisa, nem sempre temos certeza de que o dado existe. Como o “First()” retorna uma exceção, caso não encontre o dado, pode implicar em diversos erros na programação, então use o tratamento de erro try/catch. Já com o FirstOrDefault() é diferente, pois caso o dado não exista, não será gerada uma exceção, e sim será mostrado o valor Default. Exemplo (retornar o primeiro produto que começa com a letra “a”) : var produtos = (from p in db.Produtos where p.ProdutoNome.StartsWith(“a”) select p).FirstOrDefault(); Obs: caso o produto não exista será retornado o valor padrão do objeto, ou seja, o valor “null” (valor nulo); • Any : Verifica se um determinado elemento existe em uma coleção. O retorno é um valor lógico, True ou False. Exemplo: Verificar se existe o texto “aldo” na coleção: string[] nomes = {“Sabrina”, “Karina”, “Reginaldo”} ; var pesquisa = (from n in nomes where n.Contains(“aldo”) select n).Any(); // retorna True
  10. 10. Verificar se existe se existe algum cliente que nunca tenha feito um pedido: //verifica se há algum cliente sem pedido var resultado = from c in db.Clientes where !c.Pedidos.Any() select c; Uso de JOIN O “join” é utilizado quando precisamos unir dados de duas ou mais tabelas. No exemplo a seguir as classes requisitadas são Clientes e Pedidos que representam tabelas de mesmo nome em um banco de dados. No exemplo mostrado a seguir, iremos mostrar quantos pedidos existem para cada cliente: //agrupando com Join var dados = from c in db.Clientes join o in db.Pedidos on c.ClienteID equals o.ClienteID into pedidos select new {Cliente = c.Nome, QtdePedidos = pedidos.Count()};
  11. 11. No bloco a seguir é declarada no “from” a clase Clientes na variável “c”. Como precisamos unir à classe Pedidos, usamos a declaração do “join” na variável “o”: var dados = from c in db.Clientes join o in db.Pedidos Até aqui as classes estão unidas, porém é necessário informar a propriedade-chave (ou campo da tabela) que liga ambas as classes: on c.ClienteID equals o.ClienteID O “into” é a lista a ser gerada e o “select new” usa o tipo anônimo para criar as duas propriedades “Cliente” e “QtdePedidos” em tempo de execução. Observe o uso do Count() na classe pedidos indicando que será capturada a quantidade de linhas existentes, ou seja, pedidos é uma lista e a partir dela podemos extrair diversas funções de agregação como Count(), Avg(), Max(), Min() etc: into pedidos select new { Cliente = c.Nome, QtdePedidos = pedidos.Count() };
  12. 12. Expressões lambda: A expressão lambda é uma função anônima e pode conter expressões e instruções. Todas as expressões lambda usam o operador “=>”. À esquerda do operador =>, temos os parâmetros de entrada e à direita, as expressões e instruções. Exemplo: var produtos = db.Produtos .Where(p=> p.Discontinued == true) .Select(s=> new {Nome = p.ProdutoNome, UnidadesEmEstoque = p.UnidadesEmEstoque, PrecoUnitario = s.PrecoUnitario});
  13. 13. Fontes:  Como Programar com ASP.NET e C# - 2ª Edição – Alfredo Lotar;  LINQ e C# 3.0 – 1ª Edição – Renato Haddad Autor: Fabiano Roman Beraldi – fabiano.beraldi@outlook.com

×