LINQ - C#

379 visualizações

Publicada em

Breve apresentação de introdução à ferramenta LINQ em C#, ministrada no laboratório do CESAR de Sorocaba.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
379
No SlideShare
0
A partir de incorporações
0
Número de incorporações
7
Ações
Compartilhamentos
0
Downloads
26
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

LINQ - C#

  1. 1. Introdução ao LINQ no C#
  2. 2. Facilitador Fernando Padoan Engenheiro de Sistemas http://www.cesar.org.br/
  3. 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. 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. 5. Data Source string[] linguagens = new string[5] { "C#", "VB", "Javascript", "C++", "F#" }; Array IEnumerable<T> apenas em runtime
  6. 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. 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. 8. Execução Imediata int quantos = nomesCurtos.Count(); Outros exemplos: .ToArray(), .ToList(), .First()...
  9. 9. Tipos de Dados "Queryable data types": IEnumerable IEnumerable<T> IQueryable<T> ... ou qualquer outro tipo que implemente IEnumerable<T>.
  10. 10. Tipos de Dados na Consulta IEnumerable<string> nomesCurtos = from li in linguagens where li.Length < 4 select li; Mais exemplos:
  11. 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. 12. Query Syntax IEnumerable<int> pares = from num in numeros where num % 2 == 0 orderby num select num;
  13. 13. Method Syntax IEnumerable<int> pares = numeros.Where(num => num % 2 == 0).OrderBy(n => n); Extension methods Lambda expressions
  14. 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. 15. Lambda Expressions "num => num % 2 == 0" "n => n" "Func<TSource, bool> predicate" "=>" : "goes to"
  16. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  28. 28. Perguntas?
  29. 29. Obrigado!

×