SlideShare una empresa de Scribd logo
1 de 13
Language Integrated Query
(Fundamentos)
 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.
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.
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
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/>”); }
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();
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 };
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 ;
• 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
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()};
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()
};
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});
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

Más contenido relacionado

La actualidad más candente

La actualidad más candente (15)

Fila circular dinamica
Fila circular dinamicaFila circular dinamica
Fila circular dinamica
 
ArrayList Java
ArrayList JavaArrayList Java
ArrayList Java
 
Programação-Aula004
Programação-Aula004Programação-Aula004
Programação-Aula004
 
Introdução ao Respect\Validation (1.0)
Introdução ao Respect\Validation (1.0)Introdução ao Respect\Validation (1.0)
Introdução ao Respect\Validation (1.0)
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated Query
 
Java script aula 08 - formulários
Java script   aula 08 - formuláriosJava script   aula 08 - formulários
Java script aula 08 - formulários
 
Pilhas java
Pilhas javaPilhas java
Pilhas java
 
Curso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosCurso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos Comandos
 
Ajax O Objeto Xml Http Request Parte 3
Ajax   O Objeto Xml Http Request   Parte 3Ajax   O Objeto Xml Http Request   Parte 3
Ajax O Objeto Xml Http Request Parte 3
 
MYSQL - TLBDII
MYSQL - TLBDIIMYSQL - TLBDII
MYSQL - TLBDII
 
Haskell aula3 listas
Haskell aula3 listasHaskell aula3 listas
Haskell aula3 listas
 
Grails - Destaques (para quem já sabe Java)
Grails - Destaques (para quem já sabe Java)Grails - Destaques (para quem já sabe Java)
Grails - Destaques (para quem já sabe Java)
 
Pilha em C
Pilha em CPilha em C
Pilha em C
 
Banco de dados
Banco de dadosBanco de dados
Banco de dados
 
Campos calculados
Campos calculados Campos calculados
Campos calculados
 

Similar a Noçoes de LINQ

Exemplo caso de uso(Mulesoft)
Exemplo caso de uso(Mulesoft)Exemplo caso de uso(Mulesoft)
Exemplo caso de uso(Mulesoft)Guilherme Baccas
 
Lista IV de Programação Orientada a Objetos
Lista IV de Programação Orientada a ObjetosLista IV de Programação Orientada a Objetos
Lista IV de Programação Orientada a Objetosunifesptk
 
Desenvolvimento de Apps e Games para Android - Parte 6
Desenvolvimento de Apps e Games para Android - Parte 6Desenvolvimento de Apps e Games para Android - Parte 6
Desenvolvimento de Apps e Games para Android - Parte 6Erisvaldo Junior
 
LINQ - C#
LINQ - C#LINQ - C#
LINQ - C#fpadoan
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBCEduardo Mendes
 
ORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernateORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernateJuliano Oliveira
 
Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8Emiliano Barbosa
 
Fluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplicationFluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplicationJeison Barros
 
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasCurso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasLeonardo Melo Santos
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Alamo Saravali
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - TabelasDalton Martins
 
Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Felipe Pimentel
 
Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8 Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8 PeslPinguim
 

Similar a Noçoes de LINQ (20)

Java 05 Oo Basica
Java 05 Oo BasicaJava 05 Oo Basica
Java 05 Oo Basica
 
Java8
Java8Java8
Java8
 
Exemplo caso de uso(Mulesoft)
Exemplo caso de uso(Mulesoft)Exemplo caso de uso(Mulesoft)
Exemplo caso de uso(Mulesoft)
 
At00 apostila sql
At00   apostila sqlAt00   apostila sql
At00 apostila sql
 
Lista IV de Programação Orientada a Objetos
Lista IV de Programação Orientada a ObjetosLista IV de Programação Orientada a Objetos
Lista IV de Programação Orientada a Objetos
 
Desenvolvimento de Apps e Games para Android - Parte 6
Desenvolvimento de Apps e Games para Android - Parte 6Desenvolvimento de Apps e Games para Android - Parte 6
Desenvolvimento de Apps e Games para Android - Parte 6
 
Java básico - Módulo 06: Array
Java básico - Módulo 06: ArrayJava básico - Módulo 06: Array
Java básico - Módulo 06: Array
 
LINQ - C#
LINQ - C#LINQ - C#
LINQ - C#
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBC
 
ORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernateORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernate
 
Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8
 
MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 
Fluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplicationFluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplication
 
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasCurso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - Tabelas
 
Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]
 
Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8 Curso Básico de Java - Aula 8
Curso Básico de Java - Aula 8
 

Noçoes de LINQ

  • 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. 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. 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. 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. 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. 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. 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. • 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. 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. 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. 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. 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