SlideShare uma empresa Scribd logo
Introdução ao LINQ no C#
Facilitador
Fernando Padoan
Engenheiro de Sistemas
http://www.cesar.org.br/
O que é o LINQ
"Language Integrated Query"
Adicionado ao .Net em 2007
Permite criar consultas a dados utilizando as
linguagens suportadas pelo .Net Framework
Inspirado em SQL e Haskell
Exemplo de Consulta
string[] linguagens = new string[5] { "C#",
"VB", "Javascript", "C++", "F#" };
var nomesCurtos =
from li in linguagens
where li.Length < 4
select li;
foreach (string nome in nomesCurtos)
{
Console.WriteLine(nome);
}
C#
VB
C++
F#
Data Source
string[] linguagens = new string[5] {
"C#",
"VB",
"Javascript",
"C++",
"F#"
};
Array
IEnumerable<T>
apenas em runtime
Query
var nomesCurtos =
from li in linguagens
where li.Length < 4
select li;
inferência de tipo
fonte dos dados
filtragem
tipo do retorno
Até este momento, a consulta não é executada, e
nenhum dado é retornado!
Deferred Execution
foreach (string nome in nomesCurtos)
{
Console.WriteLine(nome);
}
Execução da consulta ocorre ao iterar pelo objeto de
consulta em um foreach.
Execução Imediata
int quantos = nomesCurtos.Count();
Outros exemplos:
.ToArray(), .ToList(), .First()...
Tipos de Dados
"Queryable data types":
IEnumerable
IEnumerable<T>
IQueryable<T>
... ou qualquer outro tipo que implemente
IEnumerable<T>.
Tipos de Dados na Consulta
IEnumerable<string> nomesCurtos =
from li in linguagens
where li.Length < 4
select li;
Mais exemplos:
Query vs. Method Syntax
int[] numeros = { 1, 2, 3, 5, 8, 13, 21, 34
};
IEnumerable<int> pares = // query???
foreach (int i in pares)
{
Console.Write(i + " ");
}
Query Syntax
IEnumerable<int> pares =
from num in numeros
where num % 2 == 0
orderby num
select num;
Method Syntax
IEnumerable<int> pares = numeros.Where(num
=> num % 2 == 0).OrderBy(n => n);
Extension methods
Lambda expressions
LINQ Extension Methods
namespace System.Linq
{
public static class Enumerable
{
// ...
public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate)
// ...
}
// ...
}
Lambda Expressions
"num => num % 2 == 0"
"n => n"
"Func<TSource, bool> predicate"
"=>" : "goes to"
Operações de Consulta
Obtenção de dados:
var queryClientes = from cli in clientes
select cli;
Filtragem:
var queryClientes = from cli in clientes
where cli.Saldo < 0
select cli;
...
var queryClientes = from cli in clientes
where cli.Saldo < 0 && cli.Idade < 26
select cli;
Operações de Consulta 2
Ordenação:
var queryClientes = from cli in clientes
where cli.Saldo < 0 && cli.Idade < 26
orderby cli.Cidade
select cli;
Agrupamento:
var queryClientes = from cli in clientes
group cli by cli.Cidade;
Aqui, queryClientes é do tipo
IEnumerable<IGrouping<string, Cliente>>
Operações de Consulta 3
Agrupamento (cont.):
//...
foreach (var groupClientes in queryClientes)
{
Console.WriteLine(groupClientes.Key);
foreach (Cliente cliente in groupClientes)
{
Console.WriteLine("--- {0}", cliente.Nome);
}
} Aqui, groupClientes é do tipo
IGouping<string, Cliente>
Operações de Consulta 4
Agrupamento 2:
var queryClientes =
from cli in clientes
group cli by cli.Cidade into cliGroup
where cliGroup.Count() > 2
orderby cliGroup.Key
select cliGroup;
Transformação de dados
Subsetting:
var queryClientes =
from cli in clientes
select new {
NomeCliente = cli.Nome,
Area = cli.Area
};
foreach (var cli in queryClientes)
{
Console.WriteLine(cli.NomeCliente + ", " + cli.Area);
}
Tipo Anônimo
Transformação de dados 2
Junção:
var juncaoClienteVendedor =
from cli in clientes
join vend in vendedores on cli.Area equals vend.Area
select new { NomeCliente = cli.Nome, NomeVendedor =
vend.Nome };
Transformação de dados 3
Criação de XML:
var studentsToXML =
new XElement("Root",
from student in students
let x = String.Format(
"{0},{1},{2},{3}",
student.Scores[0],
student.Scores[1],
student.Scores[2],
student.Scores[3])
select new XElement("student",
new XElement("First", student.First),
new XElement("Last", student.Last),
new XElement("Scores", x)));
Transformação de dados 4
Criação de XML(cont.) - Resultado :
<Root>
<student>
<First>Svetlana</First>
<Last>Omelchenko</Last>
<Scores>97,92,81,60</Scores>
</student>
<student>
<First>Claire</First>
<Last>O'Donnell</Last>
<Scores>75,84,91,39</Scores>
</student>
<student>
<First>Sven</First>
<Last>Mortensen</Last>
<Scores>88,94,65,91</Scores>
</student>
</Root>
Providers e API's
- LINQ To Objects
- LINQ To XML
- LINQ To SQL
- LINQ To Datasets
- LINQ To Entities
- LINQ To Google Search
- LINQ To Twitter
- LINQ To Wikipedia
- LINQ To NHibernate
- LINQ To Windos Search
...
Estendendo LINQ
Dados em memória:
- implementar IEnumerable<T>
Dados remotos:
- implementar IQueryable<T>
Criando um Provider remoto:
- implementação requerida: IQueryable<T>,
IOrderedQueryable<T> e IQueryProvider
* cuidado com performance na implementação!
Referências
Portal do LINQ no MSDN: http://bit.ly/11X5kXz
Artigo na Wikipedia: http://bit.ly/18MpCF
LINQ To Entities: http://bit.ly/13w0fqW
LINQ To Google: http://glinq.codeplex.com/
LINQ To Windos Search: http://bit.ly/117CLCW
LINQ To Twitter: http://bit.ly/dzrHjQ
Referências 2
Lambda Calculus: http://bit.ly/3LBzDJ
Lambda no C#: http://bit.ly/SakjXd
Extension Methods: http://bit.ly/SakjXd
Tipos anônimos: http://bit.ly/10ntsDI
Inferência de tipo: http://bit.ly/6puEY4
Perguntas?
Obrigado!

Mais conteúdo relacionado

PDF
Criação de aplicações web com python
PPTX
Aplicando autenticação JWT com .NET Core 2.0
PDF
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PDF
Cadastro de clientes em c#
PDF
Como Implementar Um Menu Ribbon em C#
PPTX
ASP .NET MVC - Você esta pronto para a pílula vermelha?
PPTX
Web Server Controls e Banco de Dados
Criação de aplicações web com python
Aplicando autenticação JWT com .NET Core 2.0
PHP Experience 2016 - [Palestra] Keynote: PHP-7
Cadastro de clientes em c#
Como Implementar Um Menu Ribbon em C#
ASP .NET MVC - Você esta pronto para a pílula vermelha?
Web Server Controls e Banco de Dados

Destaque (11)

PPTX
ASP .NET MVC na Prática - C. Augusto Proiete
PPTX
Desenvolviemento web com ASP.Net e MVC
PPT
Desvendando ASP.NET MVC
PPTX
Criar um sistema com asp net
PPSX
Boas práticas de programação em C# .NET
PPTX
.NET e C# - Introdução Geral
PPS
Sistema Controle de Estoque ASP.NET
PDF
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
PDF
Programação c# - banco de dados
PDF
Apostila desenvolvimento aplicações comerciais com C#
PPTX
Introdução a linguagem C# (CSharp)
ASP .NET MVC na Prática - C. Augusto Proiete
Desenvolviemento web com ASP.Net e MVC
Desvendando ASP.NET MVC
Criar um sistema com asp net
Boas práticas de programação em C# .NET
.NET e C# - Introdução Geral
Sistema Controle de Estoque ASP.NET
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Programação c# - banco de dados
Apostila desenvolvimento aplicações comerciais com C#
Introdução a linguagem C# (CSharp)
Anúncio

Semelhante a LINQ - C# (20)

PPT
LINQ - Language Integrated Query
PPTX
Introdução ao LINQ
PPTX
Palestra: LINQ via C#
PPSX
Noçoes de LINQ
PPTX
Tudo o que sempre quis saber sobre o LINQ
PPTX
SFD - C# para a comunidade
PDF
TDC 2011 Goiânia: Evolução da linguagem de programação C#
PPT
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
PPTX
Mapeamento Objeto-Relacional com LINQ
PPT
Lambda Expressions
PPTX
Csharp fundamentals
PDF
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
PDF
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
PDF
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
PPT
Novidades do .Net 4.0
PDF
TechEd 2011 Review - Evolução da linguagem de programação C#
PDF
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#
PDF
Map, filter e reduce
KEY
NoSQL e MongoDB - ETEC
LINQ - Language Integrated Query
Introdução ao LINQ
Palestra: LINQ via C#
Noçoes de LINQ
Tudo o que sempre quis saber sobre o LINQ
SFD - C# para a comunidade
TDC 2011 Goiânia: Evolução da linguagem de programação C#
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Mapeamento Objeto-Relacional com LINQ
Lambda Expressions
Csharp fundamentals
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
Novidades do .Net 4.0
TechEd 2011 Review - Evolução da linguagem de programação C#
TechEd Brasil 2011 Review - Evolução da linguagem de programação C#
Map, filter e reduce
NoSQL e MongoDB - ETEC
Anúncio

Último (8)

PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PPTX
Arquitetura de computadores - Memórias Secundárias
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Mecânico de Manutenção de Equipamentos.pptx
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Viasol Energia Solar -Soluções para geração e economia de energia
Arquitetura de computadores - Memórias Secundárias
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Mecânico de Manutenção de Equipamentos.pptx
Manejo integrado de pragas na cultura do algodão
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx

LINQ - C#

  • 2. Facilitador Fernando Padoan Engenheiro de Sistemas http://www.cesar.org.br/
  • 3. O que é o LINQ "Language Integrated Query" Adicionado ao .Net em 2007 Permite criar consultas a dados utilizando as linguagens suportadas pelo .Net Framework Inspirado em SQL e Haskell
  • 4. Exemplo de Consulta string[] linguagens = new string[5] { "C#", "VB", "Javascript", "C++", "F#" }; var nomesCurtos = from li in linguagens where li.Length < 4 select li; foreach (string nome in nomesCurtos) { Console.WriteLine(nome); } C# VB C++ F#
  • 5. Data Source string[] linguagens = new string[5] { "C#", "VB", "Javascript", "C++", "F#" }; Array IEnumerable<T> apenas em runtime
  • 6. Query var nomesCurtos = from li in linguagens where li.Length < 4 select li; inferência de tipo fonte dos dados filtragem tipo do retorno Até este momento, a consulta não é executada, e nenhum dado é retornado!
  • 7. Deferred Execution foreach (string nome in nomesCurtos) { Console.WriteLine(nome); } Execução da consulta ocorre ao iterar pelo objeto de consulta em um foreach.
  • 8. Execução Imediata int quantos = nomesCurtos.Count(); Outros exemplos: .ToArray(), .ToList(), .First()...
  • 9. Tipos de Dados "Queryable data types": IEnumerable IEnumerable<T> IQueryable<T> ... ou qualquer outro tipo que implemente IEnumerable<T>.
  • 10. Tipos de Dados na Consulta IEnumerable<string> nomesCurtos = from li in linguagens where li.Length < 4 select li; Mais exemplos:
  • 11. Query vs. Method Syntax int[] numeros = { 1, 2, 3, 5, 8, 13, 21, 34 }; IEnumerable<int> pares = // query??? foreach (int i in pares) { Console.Write(i + " "); }
  • 12. Query Syntax IEnumerable<int> pares = from num in numeros where num % 2 == 0 orderby num select num;
  • 13. Method Syntax IEnumerable<int> pares = numeros.Where(num => num % 2 == 0).OrderBy(n => n); Extension methods Lambda expressions
  • 14. LINQ Extension Methods namespace System.Linq { public static class Enumerable { // ... public static IEnumerable<TSource> Where<TSource>( this IEnumerable<TSource> source, Func<TSource, bool> predicate) // ... } // ... }
  • 15. Lambda Expressions "num => num % 2 == 0" "n => n" "Func<TSource, bool> predicate" "=>" : "goes to"
  • 16. Operações de Consulta Obtenção de dados: var queryClientes = from cli in clientes select cli; Filtragem: var queryClientes = from cli in clientes where cli.Saldo < 0 select cli; ... var queryClientes = from cli in clientes where cli.Saldo < 0 && cli.Idade < 26 select cli;
  • 17. Operações de Consulta 2 Ordenação: var queryClientes = from cli in clientes where cli.Saldo < 0 && cli.Idade < 26 orderby cli.Cidade select cli; Agrupamento: var queryClientes = from cli in clientes group cli by cli.Cidade; Aqui, queryClientes é do tipo IEnumerable<IGrouping<string, Cliente>>
  • 18. Operações de Consulta 3 Agrupamento (cont.): //... foreach (var groupClientes in queryClientes) { Console.WriteLine(groupClientes.Key); foreach (Cliente cliente in groupClientes) { Console.WriteLine("--- {0}", cliente.Nome); } } Aqui, groupClientes é do tipo IGouping<string, Cliente>
  • 19. Operações de Consulta 4 Agrupamento 2: var queryClientes = from cli in clientes group cli by cli.Cidade into cliGroup where cliGroup.Count() > 2 orderby cliGroup.Key select cliGroup;
  • 20. Transformação de dados Subsetting: var queryClientes = from cli in clientes select new { NomeCliente = cli.Nome, Area = cli.Area }; foreach (var cli in queryClientes) { Console.WriteLine(cli.NomeCliente + ", " + cli.Area); } Tipo Anônimo
  • 21. Transformação de dados 2 Junção: var juncaoClienteVendedor = from cli in clientes join vend in vendedores on cli.Area equals vend.Area select new { NomeCliente = cli.Nome, NomeVendedor = vend.Nome };
  • 22. Transformação de dados 3 Criação de XML: var studentsToXML = new XElement("Root", from student in students let x = String.Format( "{0},{1},{2},{3}", student.Scores[0], student.Scores[1], student.Scores[2], student.Scores[3]) select new XElement("student", new XElement("First", student.First), new XElement("Last", student.Last), new XElement("Scores", x)));
  • 23. Transformação de dados 4 Criação de XML(cont.) - Resultado : <Root> <student> <First>Svetlana</First> <Last>Omelchenko</Last> <Scores>97,92,81,60</Scores> </student> <student> <First>Claire</First> <Last>O'Donnell</Last> <Scores>75,84,91,39</Scores> </student> <student> <First>Sven</First> <Last>Mortensen</Last> <Scores>88,94,65,91</Scores> </student> </Root>
  • 24. Providers e API's - LINQ To Objects - LINQ To XML - LINQ To SQL - LINQ To Datasets - LINQ To Entities - LINQ To Google Search - LINQ To Twitter - LINQ To Wikipedia - LINQ To NHibernate - LINQ To Windos Search ...
  • 25. Estendendo LINQ Dados em memória: - implementar IEnumerable<T> Dados remotos: - implementar IQueryable<T> Criando um Provider remoto: - implementação requerida: IQueryable<T>, IOrderedQueryable<T> e IQueryProvider * cuidado com performance na implementação!
  • 26. Referências Portal do LINQ no MSDN: http://bit.ly/11X5kXz Artigo na Wikipedia: http://bit.ly/18MpCF LINQ To Entities: http://bit.ly/13w0fqW LINQ To Google: http://glinq.codeplex.com/ LINQ To Windos Search: http://bit.ly/117CLCW LINQ To Twitter: http://bit.ly/dzrHjQ
  • 27. Referências 2 Lambda Calculus: http://bit.ly/3LBzDJ Lambda no C#: http://bit.ly/SakjXd Extension Methods: http://bit.ly/SakjXd Tipos anônimos: http://bit.ly/10ntsDI Inferência de tipo: http://bit.ly/6puEY4