SlideShare a Scribd company logo
LINQ edoltreVerso lospazioprofondo(dove vi aspetta Raf  )Ricci Gian Maria:alkampfer@nablasoft.com
LINQ in un eventosul C# 4.0?Gran parte delle funzionalità delle parallel libraries è comunque basata su LINQRinforzare le basi non fa mai maleIniziamo sul leggero, perchè poi c’è Raf 
AnonymousdelegateLambda expressionSebbene gli anonymous delegate siano una funzionalità del 2.0 alcuni concetti sono necessari per LINQ
È importante capire bene cosa sia una closure
Grazie alle closure è possibile facilitare l’operazione di Currying [schönfinkeling] (cambio di arità di una funzione)
Che brutte parole ……..Anonymousdelegates
LINQVedremo ora una presentazione di LINQ collegata ad un ripasso delle funzionalità di C# 3.0
Quello che verrà fatto è mostrare come le nuove caratteristiche di C# 3.0 sono state introdotte principalmente al servizio di LINQPossibilegenesi di LINQ
Lambda expressionLambda expressionA lambda expression is an anonymous function that can contain expressions and statements, and can be used to create delegates or expression tree types.
All’apparenza è solamenteSyntactic Sugar
Ma…….Magia o trucco?Lambda expression
Lambda expressionLambda expressionQuesta «magia» accade perché il compilatore ha due modi distinti di rappresentare una lambda
Funzione anonima
ExpressionTree: ovvero la rappresentazione dell’espressione con oggetti .NET organizzati in un normale «expressiontree»Expression TreeLambda expression+5 * 1 + 44*51
Expression Tree .NETLambda expressionQuella appena vista è una ExpressionTree relativa ad una espressione numericaUna ExpressionTree in .NET è sostanzialmente più complessa, perché deve rappresentare accesso ad oggetti, chiamata a metodi, Etc.Una lambda MultiRiga non può essere convertita dal compilatore in ExpressionTree.
Expression Tree .NETLambda expressiono.Customer.Name.StartsWith("A")LambdaEsprime la chiamata a funzione StartsWith, necessita di un oggetto su cui chiamarlo e di una serie di parametri, in questo caso la stringa “A”CallMember AccessConstantL’unico parametro del metodo StartsWith()Nel primo ramo si indica l’oggetto su cui va invocata la funzione.Member AccessAccesso al membro Name dell’oggetto CustomerAccesso al membro Customer dell’oggetto Order.ParameterIl parametro della query, l’ordine o.
Expression<Func<int, bool>>  lambda =   num => num < 5;Expression Trees
Chi usa le Expression TreeLambda expressionI primi utilizzatori delle ExpressionTree sono i Provider LINQUn provider LINQ implementa la IQueryable<T> per tradurre una query LINQ in un qualcosa comprensibile alla sorgenteES. LINQ to NHibernate converte in query NHibernate, LINQ to LDAP converte in query LDAP, Etc.
Provider LINQLambda expressionUn provider linq deve quindi solamente tradurre una ExpressionTree in qualche cos’altroExpTreeSQLHQLLDAPLINQ QUERYCompilerProvider
Provider LINQLambda expressionÈ grazie al compilatore che produce una ExpressionTree che il provider per EF/NH/SQL quando vede una chiamata al metodo String.StartsWith() decide di generare una query SQL con operatore LIKEAlcuni provider, come il LINQ to XML sono invece implementati tramite IEnumerable<T>Se siete interessati a come si implementa un provider LINQ  magari un prossimo WS
Expression Trees - Le usero mai?
StaticReflectionLambda expressionLa static reflection è un uso “intelligente” degli expression tree per evitare reflectionStaticReflection
Compilazione di expressionTreeLambda expressionAccedere tramite reflection ad un metodo può essere lento.
Si possono usare le Expression Tree per generare una funzione dinamicamenteCompilazione di expressionTreeLambda expression
Compilazione di Expression Tree
OrderBydinamici su LINQLambda expressionSi ha un repository basato su IQueryable<T>
Si vuole ordinare per una proprietà che è passata come stringa

More Related Content

PPTX
Deep diving C# 4 (Raffaele Rialdi)
DotNetMarche
 
PPTX
Funzioni
Lorena Rojas
 
PPTX
Reflection in C#
Rohit Vipin Mathews
 
DOCX
C# Collection classes
MohitKumar1985
 
PPTX
Costruire app per WinPhone, iOS e Android con C# e Xamarin
Fabio Cozzolino
 
PDF
MS c# - programming with.net framework - Scheda corso LEN
LEN Learning Education Network
 
PPT
Advanced c#
AkashThakrar
 
PPTX
Inversion of Control @ CD2008
Mauro Servienti
 
Deep diving C# 4 (Raffaele Rialdi)
DotNetMarche
 
Funzioni
Lorena Rojas
 
Reflection in C#
Rohit Vipin Mathews
 
C# Collection classes
MohitKumar1985
 
Costruire app per WinPhone, iOS e Android con C# e Xamarin
Fabio Cozzolino
 
MS c# - programming with.net framework - Scheda corso LEN
LEN Learning Education Network
 
Advanced c#
AkashThakrar
 
Inversion of Control @ CD2008
Mauro Servienti
 

Similar to Linq ed oltre (20)

PPT
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Giovanni Cappellini
 
PDF
Introduzione a node.js
Luciano Colosio
 
PDF
Introduzione a Node.js
Michele Capra
 
PDF
Modulo 6 Spring Framework Core E Aop
jdksrl
 
PPSX
Entity Framework 4.0 vs NHibernate
Manuel Scapolan
 
PDF
Dal RenderFragment ai Generics, tips for Blazor developers
Andrea Dottor
 
PPTX
C# 3.0 e LINQ
Andrea Angella
 
PDF
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Wellnet srl
 
PDF
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Eugenio Minardi
 
PDF
[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf
Francesco Liuzzi
 
PPT
Vb.Net
Maurizio Farina
 
PDF
Maria Grazia Maffucci- programmazione presentazione
Maria Grazia Maffucci
 
PPT
Primo Incontro Con Scala
Franco Lombardo
 
ODP
Many Designs Elements
Giampiero Granatella
 
KEY
Twcrashcourse
rik0
 
PDF
Lezione 6: Remote Method Invocation
Andrea Della Corte
 
PPT
Capitolo 7 elementi di programmazione c-c++
Giovanni Della Lunga
 
PDF
react-it.pdf
ssuser65180a
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Giovanni Cappellini
 
Introduzione a node.js
Luciano Colosio
 
Introduzione a Node.js
Michele Capra
 
Modulo 6 Spring Framework Core E Aop
jdksrl
 
Entity Framework 4.0 vs NHibernate
Manuel Scapolan
 
Dal RenderFragment ai Generics, tips for Blazor developers
Andrea Dottor
 
C# 3.0 e LINQ
Andrea Angella
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Wellnet srl
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Eugenio Minardi
 
[Laravel Day 2022] Deploy di Laravel su AWS Lambda (from Zero to Hero).pdf
Francesco Liuzzi
 
Maria Grazia Maffucci- programmazione presentazione
Maria Grazia Maffucci
 
Primo Incontro Con Scala
Franco Lombardo
 
Many Designs Elements
Giampiero Granatella
 
Twcrashcourse
rik0
 
Lezione 6: Remote Method Invocation
Andrea Della Corte
 
Capitolo 7 elementi di programmazione c-c++
Giovanni Della Lunga
 
react-it.pdf
ssuser65180a
 
Ad

More from Gian Maria Ricci (20)

PPTX
Se non sviluppo codice non sto lavorando
Gian Maria Ricci
 
PPTX
Gestire la qualità del codice con Visual Studio, SonarQube ed Azure Devops
Gian Maria Ricci
 
PPTX
Migrare da un VCS centralizzato a Git
Gian Maria Ricci
 
PPTX
Real World Build + Release automation in Azure DevOps
Gian Maria Ricci
 
PPTX
Gestire i rilasci automatici con azure devops
Gian Maria Ricci
 
PPTX
Build and release in code with azure devops pipelines
Gian Maria Ricci
 
PPTX
Azure Pipeline in salsa yaml
Gian Maria Ricci
 
PPTX
Git gitflow pull requests in devops focused teams
Gian Maria Ricci
 
PPTX
Distribute your code with NUget and build vNext
Gian Maria Ricci
 
PPTX
Manage your environment with DSC
Gian Maria Ricci
 
PPTX
Introduction to Application insights
Gian Maria Ricci
 
PPTX
Git branching model
Gian Maria Ricci
 
PPTX
Deploy applications with TFS Build
Gian Maria Ricci
 
PPTX
TFS - Quale source control
Gian Maria Ricci
 
PPTX
Branch model in Git
Gian Maria Ricci
 
PPTX
Introduction to Visual Studio Online
Gian Maria Ricci
 
PPTX
Git si o Git No
Gian Maria Ricci
 
PPTX
Testing
Gian Maria Ricci
 
PPTX
Come Organizzare il proprio Team Project
Gian Maria Ricci
 
PPTX
Git Perchè Usarlo
Gian Maria Ricci
 
Se non sviluppo codice non sto lavorando
Gian Maria Ricci
 
Gestire la qualità del codice con Visual Studio, SonarQube ed Azure Devops
Gian Maria Ricci
 
Migrare da un VCS centralizzato a Git
Gian Maria Ricci
 
Real World Build + Release automation in Azure DevOps
Gian Maria Ricci
 
Gestire i rilasci automatici con azure devops
Gian Maria Ricci
 
Build and release in code with azure devops pipelines
Gian Maria Ricci
 
Azure Pipeline in salsa yaml
Gian Maria Ricci
 
Git gitflow pull requests in devops focused teams
Gian Maria Ricci
 
Distribute your code with NUget and build vNext
Gian Maria Ricci
 
Manage your environment with DSC
Gian Maria Ricci
 
Introduction to Application insights
Gian Maria Ricci
 
Git branching model
Gian Maria Ricci
 
Deploy applications with TFS Build
Gian Maria Ricci
 
TFS - Quale source control
Gian Maria Ricci
 
Branch model in Git
Gian Maria Ricci
 
Introduction to Visual Studio Online
Gian Maria Ricci
 
Git si o Git No
Gian Maria Ricci
 
Come Organizzare il proprio Team Project
Gian Maria Ricci
 
Git Perchè Usarlo
Gian Maria Ricci
 
Ad

Linq ed oltre

  • 1. LINQ edoltreVerso lospazioprofondo(dove vi aspetta Raf  )Ricci Gian Maria:[email protected]
  • 2. LINQ in un eventosul C# 4.0?Gran parte delle funzionalità delle parallel libraries è comunque basata su LINQRinforzare le basi non fa mai maleIniziamo sul leggero, perchè poi c’è Raf 
  • 3. AnonymousdelegateLambda expressionSebbene gli anonymous delegate siano una funzionalità del 2.0 alcuni concetti sono necessari per LINQ
  • 4. È importante capire bene cosa sia una closure
  • 5. Grazie alle closure è possibile facilitare l’operazione di Currying [schönfinkeling] (cambio di arità di una funzione)
  • 6. Che brutte parole ……..Anonymousdelegates
  • 7. LINQVedremo ora una presentazione di LINQ collegata ad un ripasso delle funzionalità di C# 3.0
  • 8. Quello che verrà fatto è mostrare come le nuove caratteristiche di C# 3.0 sono state introdotte principalmente al servizio di LINQPossibilegenesi di LINQ
  • 9. Lambda expressionLambda expressionA lambda expression is an anonymous function that can contain expressions and statements, and can be used to create delegates or expression tree types.
  • 12. Lambda expressionLambda expressionQuesta «magia» accade perché il compilatore ha due modi distinti di rappresentare una lambda
  • 14. ExpressionTree: ovvero la rappresentazione dell’espressione con oggetti .NET organizzati in un normale «expressiontree»Expression TreeLambda expression+5 * 1 + 44*51
  • 15. Expression Tree .NETLambda expressionQuella appena vista è una ExpressionTree relativa ad una espressione numericaUna ExpressionTree in .NET è sostanzialmente più complessa, perché deve rappresentare accesso ad oggetti, chiamata a metodi, Etc.Una lambda MultiRiga non può essere convertita dal compilatore in ExpressionTree.
  • 16. Expression Tree .NETLambda expressiono.Customer.Name.StartsWith("A")LambdaEsprime la chiamata a funzione StartsWith, necessita di un oggetto su cui chiamarlo e di una serie di parametri, in questo caso la stringa “A”CallMember AccessConstantL’unico parametro del metodo StartsWith()Nel primo ramo si indica l’oggetto su cui va invocata la funzione.Member AccessAccesso al membro Name dell’oggetto CustomerAccesso al membro Customer dell’oggetto Order.ParameterIl parametro della query, l’ordine o.
  • 17. Expression<Func<int, bool>> lambda = num => num < 5;Expression Trees
  • 18. Chi usa le Expression TreeLambda expressionI primi utilizzatori delle ExpressionTree sono i Provider LINQUn provider LINQ implementa la IQueryable<T> per tradurre una query LINQ in un qualcosa comprensibile alla sorgenteES. LINQ to NHibernate converte in query NHibernate, LINQ to LDAP converte in query LDAP, Etc.
  • 19. Provider LINQLambda expressionUn provider linq deve quindi solamente tradurre una ExpressionTree in qualche cos’altroExpTreeSQLHQLLDAPLINQ QUERYCompilerProvider
  • 20. Provider LINQLambda expressionÈ grazie al compilatore che produce una ExpressionTree che il provider per EF/NH/SQL quando vede una chiamata al metodo String.StartsWith() decide di generare una query SQL con operatore LIKEAlcuni provider, come il LINQ to XML sono invece implementati tramite IEnumerable<T>Se siete interessati a come si implementa un provider LINQ  magari un prossimo WS
  • 21. Expression Trees - Le usero mai?
  • 22. StaticReflectionLambda expressionLa static reflection è un uso “intelligente” degli expression tree per evitare reflectionStaticReflection
  • 23. Compilazione di expressionTreeLambda expressionAccedere tramite reflection ad un metodo può essere lento.
  • 24. Si possono usare le Expression Tree per generare una funzione dinamicamenteCompilazione di expressionTreeLambda expression
  • 26. OrderBydinamici su LINQLambda expressionSi ha un repository basato su IQueryable<T>
  • 27. Si vuole ordinare per una proprietà che è passata come stringa
  • 28. L’operatore OrderBy di LINQ non accetta una stringa, ma una Expression TreeOrderBydinamici su LINQLambda expressionLa soluzione è generare run-time l’expressiontree che si attenderebbe la OrderBy
  • 29. Ad esempio scrivendo customers.OrderByProperty("Name", false) si deve generare la stessa Expression che si avrebbe scrivendo customers.OrderBy(c => c.Name)Order by dinamici su LINQ
  • 30. ConclusioniLambda expressionUna buona padronanza delle ExpressionTree può aiutare a risolvere problemi “quotidiani”
  • 31. Conoscere le ExpressionTree non è quindi solo appannaggio di chi scrive un provider LINQ
  • 32. Grazie alle Lambda Expression anche in C# si può adottare una programmazione in stile «funzionale»?
  • 33. CODE