Your SlideShare is downloading. ×
0
http://netponto.org<br />10ª Reunião Presencial – 15/05/2010<br />Tudo o que sempre quis saber sobre LINQSérgio Amendoeira...
Sérgio Amendoeira<br />Arquitecto de Soluções na Tecnocom Portugal. <br />Responsável pelo desenvolvimento de diversas Arq...
Agenda<br />Introdução<br />LINQ - Como funciona?<br />LINQ sobre objectos em memória<br />LINQ sobre dados externos<br />...
Introdução<br />anguage<br />tegrated<br />L<br />IN<br />Q<br />uery<br />
Introdução<br />L<br />anguage<br />tegrated<br />IN<br />uery<br />Q<br />
Introdução<br />L<br />anguage<br />tegrated<br />IN<br />uery<br />Q<br />
Introdução<br /><ul><li>Qual a linguagemmais utilizada para realizar queries sobre dados relacionais?</li></ul>T-SQL<br />...
Introdução<br /><ul><li>Qual a linguagemmais utilizada para realizar queries sobre dados relacionais?</li></ul>T-SQL<br />...
Introdução<br /><ul><li>Qual a linguagemmais utilizada para realizar queries sobre dados relacionais?</li></ul>LINQ<br />v...
Introdução<br /><ul><li>Podemos pesquisar sobre qualquer tipo de objecto?</li></ul>Não e Sim<br />Dados Externos<br />Dado...
 Arrays
 Ancestors<T>
 Descendants<T>
 ...</li></ul>IQueryable<T><br /><ul><li> Table<T>
 ...</li></li></ul><li>LINQ – Como Funciona<br />List<Bar> listaBares;<br />var baresEmLisboa = <br />from bar in listaBar...
LINQ – Como funciona?<br />var baresEmLisboa = <br />listaBares.Where(bar => bar.Localidade == “Lisboa”).Select(bar => bar...
LINQ – Como funciona?<br />bar => bar.Localidade == “Lisboa”<br />bar => bar.Nome<br />Lambdas como Delegates<br />delegat...
LINQ – Como funciona?<br />var entradasEmBares = <br />from bar in listaBares<br />where bar.Localidade == “Lisboa”<br />s...
LINQ – Como funciona?<br />lista<br />List<int> lista;<br />var query = from elemento in lista select elemento<br />foreac...
LINQ (Objectos em Memória)<br />Demo<br />Código-fontedisponívelpara download:<br />http://netponto.codeplex.com/releases/...
LINQ to SQL<br />DataContext (ORM)<br /><ul><li> Suporte para LINQ (IQueryable<T>)
 Designer Gráfico
 Object Tracking
 Lazy Loading
 Insert / Update / Delete</li></ul>+<br />LINQ<br />
LINQ to SQL – Como funciona?<br />bar => bar.Localidade == ´Lisboa’<br />bar => bar.Nome<br />Lambdas como Expression<br /...
LINQ to SQL – Como funciona?<br />var query = from bar in contexto.Bars select bar<br />query.ToList()<br />Table<T><br />...
LINQ to SQL – Como funciona?<br />var query = from bar in contexto.Bars select bar<br />query.ToList()<br />Transformação ...
LINQ to SQL<br />Demo<br />Código-fontedisponívelpara download:<br />http://netponto.codeplex.com/releases/view/46929<br />
LINQ to Anything<br /><ul><li>Podemos pesquisar sobre qualquerobjectos?</li></ul>Não e Sim<br />Dados Externos<br />- IQue...
Suportar OrderBy
 IQueryProvider</li></ul>Dados Em Memória<br /><ul><li>IEnumerable<T>
 Where
 ...</li></li></ul><li>LINQ to Anything (IEnumerable)<br />Demo<br />Código-fontedisponívelpara download:<br />http://netp...
LINQ to Anything (IQueryable<T>)<br /><ul><li>LINQ to Sharepoint
LINQ to Entities
LINQ to Google
dotConnect
LINQ to Oracle, MySQL, PostgreSQL, and SQLite
LINQ to CSV
LINQ to Wikipedia
LINQ to Twitter
Upcoming SlideShare
Loading in...5
×

Tudo o que sempre quis saber sobre o LINQ

3,334

Published on

O LINQ já existe há algum tempo, mas por vezes é visto como um bicho de 7 cabeças, e é muitas vezes descartado quando as alternativas são “mais simples”. Mas o LINQ também é simples, e oferece vantagens quando se pretende obter, pesquisar e actualizar dados em (qualquer) fonte de dados. Mais, fá-lo de uma maneira consistente e sempre utilizando a mesma sintaxe. Quer obter ou pesquisar dados em Objectos? Quer obter ou pesquisar dados em BDs? Quer obter ou pesquisar dados em XML? Quer obter ou pesquisar dados em listas de Sharepoint? O LINQ permite tudo isto e mais através dos seus diversos "providers". Venha então descobrir nesta sessão tudo o que o LINQ tem para oferecer, e descobrir que afinal talvez o LINQ seja a solução ideal para a sua aplicação.

1 Comment
1 Like
Statistics
Notes
No Downloads
Views
Total Views
3,334
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
62
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Tudo o que sempre quis saber sobre o LINQ"

  1. 1. http://netponto.org<br />10ª Reunião Presencial – 15/05/2010<br />Tudo o que sempre quis saber sobre LINQSérgio Amendoeira<br />
  2. 2. Sérgio Amendoeira<br />Arquitecto de Soluções na Tecnocom Portugal. <br />Responsável pelo desenvolvimento de diversas Arquitecturas de Referência para aplicações da Tecnocom em tecnologias Microsoft. <br />Membro do Grupo de Arquitectura de Software (GASP)<br />Speaker nos eventos TechDays (2005 e 2007, 2010). <br />
  3. 3. Agenda<br />Introdução<br />LINQ - Como funciona?<br />LINQ sobre objectos em memória<br />LINQ sobre dados externos<br />LINQ to Anything<br />Parallel LINQ<br />
  4. 4. Introdução<br />anguage<br />tegrated<br />L<br />IN<br />Q<br />uery<br />
  5. 5. Introdução<br />L<br />anguage<br />tegrated<br />IN<br />uery<br />Q<br />
  6. 6. Introdução<br />L<br />anguage<br />tegrated<br />IN<br />uery<br />Q<br />
  7. 7. Introdução<br /><ul><li>Qual a linguagemmais utilizada para realizar queries sobre dados relacionais?</li></ul>T-SQL<br />LINQ<br />var baresEmLisboa = <br />from bar in listaBares<br />where bar.Localidade == “Lisboa”<br />select bar.Nome;<br />Select Bares.Nome<br />From Bares<br />Where Localidade = ‘Lisboa’<br />
  8. 8. Introdução<br /><ul><li>Qual a linguagemmais utilizada para realizar queries sobre dados relacionais?</li></ul>T-SQL<br />Select Bares.Nome<br />From Bares<br />Where Localidade = ‘Lisboa’<br />
  9. 9. Introdução<br /><ul><li>Qual a linguagemmais utilizada para realizar queries sobre dados relacionais?</li></ul>LINQ<br />var baresEmLisboa = <br />from bar in listaBares<br />where bar.Localidade == “Lisboa”<br />select bar.Nome;<br />
  10. 10. Introdução<br /><ul><li>Podemos pesquisar sobre qualquer tipo de objecto?</li></ul>Não e Sim<br />Dados Externos<br />Dados em Memória<br />IEnumerable<T><br /><ul><li> List<T>
  11. 11. Arrays
  12. 12. Ancestors<T>
  13. 13. Descendants<T>
  14. 14. ...</li></ul>IQueryable<T><br /><ul><li> Table<T>
  15. 15. ...</li></li></ul><li>LINQ – Como Funciona<br />List<Bar> listaBares;<br />var baresEmLisboa = <br />from bar in listaBares<br />where bar.Localidade == “Lisboa”<br />select bar.Nome;<br />Expressões Lambda<br />var baresEmLisboa = <br />listaBares.Where(bar => bar.Localidade == “Lisboa”).Select(bar => bar.Nome);<br />Tradução Sintática<br />
  16. 16. LINQ – Como funciona?<br />var baresEmLisboa = <br />listaBares.Where(bar => bar.Localidade == “Lisboa”).Select(bar => bar.Nome);<br />Métodos de Extensão<br />var baresEmLisboa = <br />Enumerable.Select(<br /> Enumerable.Where(<br /> listaBares, <br /> bar => bar.Localidade == “Lisboa”),<br /> bar => bar.Nome);<br />
  17. 17. LINQ – Como funciona?<br />bar => bar.Localidade == “Lisboa”<br />bar => bar.Nome<br />Lambdas como Delegates<br />delegate(Bar bar) <br />{ return bar.Localidade == “Lisboa”; }<br />delegate(Bar bar)<br />{ return bar.Nome; }<br />var baresEmLisboa = <br />Enumerable.Select(<br /> Enumerable.Where(<br /> listaBares, delegate(Bar bar) { return bar.Localidade == “Lisboa”; } ),<br />delegate(Bar bar) { return bar.Nome; } );<br />
  18. 18. LINQ – Como funciona?<br />var entradasEmBares = <br />from bar in listaBares<br />where bar.Localidade == “Lisboa”<br />select new { <br /> NomeBar = bar.Nome,<br /> bar.Entrada<br /> } <br />Variável de Tipo Implícito<br />Tipos Anónimos<br />class anonymous<br />{<br /> public string NomeBar { get; set; }<br /> public decimal Entrada { get; set; }<br />}<br />
  19. 19. LINQ – Como funciona?<br />lista<br />List<int> lista;<br />var query = from elemento in lista select elemento<br />foreach(int elemento in query) { Print(elemento) ; }<br />for(int i=0;i<lista.Count; i++) { lista[i] = -lista[i] ; }<br />foreach(int elemento in query) { Print(elemento) ; }<br />1<br />2<br />3<br />4<br />5<br />Delayed<br />Execution<br />Resultado? <br />a) 1 2 3 4 5 -1 -2 -3 -4 -5<br />a) 1 2 3 4 5 -1 -2 -3 -4 -5<br />b) 1 2 3 4 5 1 2 3 4 5<br />c) 1 -2 3 -4 5 -1 2 -3 4 -5<br />
  20. 20. LINQ (Objectos em Memória)<br />Demo<br />Código-fontedisponívelpara download:<br />http://netponto.codeplex.com/releases/view/46929<br />
  21. 21. LINQ to SQL<br />DataContext (ORM)<br /><ul><li> Suporte para LINQ (IQueryable<T>)
  22. 22. Designer Gráfico
  23. 23. Object Tracking
  24. 24. Lazy Loading
  25. 25. Insert / Update / Delete</li></ul>+<br />LINQ<br />
  26. 26. LINQ to SQL – Como funciona?<br />bar => bar.Localidade == ´Lisboa’<br />bar => bar.Nome<br />Lambdas como Expression<br />Trees<br />==<br />.<br />’Lisboa’<br />bar<br />Localidade<br />.<br />bar<br />Nome<br />
  27. 27. LINQ to SQL – Como funciona?<br />var query = from bar in contexto.Bars select bar<br />query.ToList()<br />Table<T><br />Expression Trees<br />
  28. 28. LINQ to SQL – Como funciona?<br />var query = from bar in contexto.Bars select bar<br />query.ToList()<br />Transformação efectuada aqui<br />Table<T><br />T-SQL Query<br />
  29. 29. LINQ to SQL<br />Demo<br />Código-fontedisponívelpara download:<br />http://netponto.codeplex.com/releases/view/46929<br />
  30. 30. LINQ to Anything<br /><ul><li>Podemos pesquisar sobre qualquerobjectos?</li></ul>Não e Sim<br />Dados Externos<br />- IQueryable<T><br /><ul><li>IOrderedQueryable<T>
  31. 31. Suportar OrderBy
  32. 32. IQueryProvider</li></ul>Dados Em Memória<br /><ul><li>IEnumerable<T>
  33. 33. Where
  34. 34. ...</li></li></ul><li>LINQ to Anything (IEnumerable)<br />Demo<br />Código-fontedisponívelpara download:<br />http://netponto.codeplex.com/releases/view/46929<br />
  35. 35. LINQ to Anything (IQueryable<T>)<br /><ul><li>LINQ to Sharepoint
  36. 36. LINQ to Entities
  37. 37. LINQ to Google
  38. 38. dotConnect
  39. 39. LINQ to Oracle, MySQL, PostgreSQL, and SQLite
  40. 40. LINQ to CSV
  41. 41. LINQ to Wikipedia
  42. 42. LINQ to Twitter
  43. 43. ...</li></li></ul><li>Parallel LINQ<br />Dados Em Memória<br /><ul><li> ParallelQuery<T></li></ul>var baresEmLisboa = <br />from bar in listaBares.AsParallel()<br />where bar.Localidade == “Lisboa”<br />select bar.Nome;<br />var baresEmLisboa = <br />from bar in listaBares<br />where bar.Localidade == “Lisboa”<br />select bar.Nome;<br />
  44. 44. Parallel LINQ<br />Dados Em Memória<br /><ul><li> ParallelQuery<T></li></ul>var baresEmLisboa = <br />from bar in listaBares<br />where bar.Localidade == “Lisboa”<br />select bar.Nome;<br />
  45. 45. Parallel LINQ<br />Dados Em Memória<br /><ul><li> ParallelQuery<T></li></ul>var baresEmLisboa = <br />from bar in listaBares.AsParallel()<br />where bar.Localidade == “Lisboa”<br />select bar.Nome;<br />
  46. 46. Parallel LINQ<br /><ul><li>Paralelização de queries, mas apenas se PLINQ achar que se ganha algo por correr em paralelo.
  47. 47. Override com .WithExecutionMode(ParallelExecutionMode)
  48. 48. Usa todos os processadores até ao máximo de 64
  49. 49. Override com .WithDegreeOfParallelism(int)
  50. 50. Preservação de ordenação de origem
  51. 51. Defaultsempreservação (.AsUnordered()) masoverride com .AsOrdered()</li></li></ul><li>Parallel LINQ<br /><ul><li>Saltar entre processamento Paralelo e Sequencial</li></ul>.AsSequential()<br />ParallelQuery<T><br />IEnumerable<T><br />.AsParallel()<br />
  52. 52. Parallel LINQ<br /><ul><li>Merge das threads de PLINQ depende de operadores mas pode ser forçado (.WithMergeOptions(ParallelMergeOptions))
  53. 53. NotBuffered</li></ul>1<br />Processa<br />Devolve Resultado<br />2<br />Processa<br />Devolve Resultado<br />3<br />Processa<br />Devolve Resultado<br />4<br />Processa<br />Devolve Resultado<br />5<br />Processa<br />Devolve Resultado<br />6<br />Processa<br />Devolve Resultado<br />7<br />Processa<br />Devolve Resultado<br />8<br />Processa<br />Devolve Resultado<br />
  54. 54. Parallel LINQ<br /><ul><li>AutoBuffered</li></ul>1<br />Processa<br />2<br />Processa<br />Devolve Resultados<br />3<br />Processa<br />4<br />Processa<br />5<br />Processa<br />6<br />Processa<br />Devolve Resultados<br />7<br />Processa<br />8<br />Processa<br />Devolve Resultado<br />
  55. 55. Parallel LINQ<br /><ul><li>FullBuffered</li></ul>1<br />Processa<br />2<br />Processa<br />3<br />Processa<br />4<br />Processa<br />Devolve Resultados<br />5<br />Processa<br />6<br />Processa<br />7<br />Processa<br />8<br />Processa<br />
  56. 56. Parallel LINQ<br /><ul><li>.ForAll(Action<T>) = foreach em paralelo (sem merge de threads)</li></ul>ForAll<br />ForEach<br />1<br />Processa<br />1<br />Processa<br />2<br />Processa<br />2<br />Processa<br />3<br />Processa<br />3<br />Processa<br />4<br />Processa<br />4<br />Processa<br />5<br />Processa<br />5<br />Processa<br />
  57. 57. Parallel LINQ<br /><ul><li>.ForAll(Action<T>) = foreach em paralelo (sem merge de threads)</li></ul>ForEach<br />1<br />Processa<br />2<br />Processa<br />3<br />Processa<br />4<br />Processa<br />5<br />Processa<br />
  58. 58. Parallel LINQ<br /><ul><li>.ForAll(Action<T>) = foreach em paralelo (sem merge de threads)</li></ul>ForAll<br />1<br />Processa<br />2<br />Processa<br />3<br />Processa<br />4<br />Processa<br />5<br />Processa<br />
  59. 59. Parallel LINQ<br /><ul><li>Tratamento de múltiplas excepções - AggregateException </li></ul>AggregateException<br />1<br />Processa<br />2<br />Processa<br />3<br />Processa<br />4<br />Processa<br />
  60. 60. Parallel LINQ<br /><ul><li>Tratamento de múltiplas excepções - AggregateException </li></ul>1<br />Processa<br />2<br />Processa<br />3<br />Processa<br />4<br />Processa<br />
  61. 61. Parallel LINQ<br /><ul><li>Tratamento de múltiplas excepções - AggregateException </li></ul>AggregateException<br />1<br />Processa<br />2<br />Processa<br />3<br />Processa<br />4<br />Processa<br />
  62. 62. LINQ – Conclusões<br /><ul><li>Type Safe
  63. 63. Sintaxecomumsobrevárias (qualquer) data source
  64. 64. Altamente Extensível (desde simples a extremamente complexo)
  65. 65. Funcionalidades de suporte podem ser usadas individualmente
  66. 66. PLINQ evolui para Multi-Processador</li></li></ul><li>LINQs <br />Query Comprehensions<br /><ul><li>http://msdn.microsoft.com/en-us/magazine/cc163378.aspx</li></ul>101 LINQ Samples<br /><ul><li>http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx</li></ul>LINQ to XML<br /><ul><li>http://msdn.microsoft.com/en-us/library/bb387098.aspx</li></ul>LINQ to SQL<br /><ul><li>http://msdn.microsoft.com/en-us/library/bb425822.aspx</li></ul>LINQ to SQL DebugVisualizer<br /><ul><li>http://weblogs.asp.net/scottgu/archive/2007/07/31/linq-to-sql-debug-visualizer.aspx</li></ul>Parallel LINQ<br /><ul><li>http://msdn.microsoft.com/en-us/library/dd460688.aspx</li></li></ul><li>Download<br />Download do código-fonte das demonstraçõesdestaapresentação:<br />http://netponto.codeplex.com/releases/view/46929<br />
  67. 67. Sérgio Amendoeira<br />Arquitecto de Soluções na Tecnocom Portugal. <br />Responsável pelo desenvolvimento de diversas Arquitecturas de Referência para aplicações da Tecnocom em tecnologias Microsoft. <br />Membro do Grupo de Arquitectura de Software (GASP)<br />Speaker nos eventos TechDays (2005 e 2007, 2010). <br />
  68. 68. Questões?<br />
  69. 69. Patrocinadores desta reunião<br />Paulo Morgado<br />
  70. 70. Próximas reuniões presenciais<br />15/05/2010 - Maio<br />19/06/2010 - Junho<br />26/06/2010 - Junho (Porto?)<br />10/07/2010 - Julho<br />14/08/2010 - AgostoReserva estes dias na agenda! :)<br />
  71. 71. Obrigado!<br />Sérgio Amendoeira<br />sergio.amendoeira@tecnocom.pt<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×