• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Linq ed oltre
 

Linq ed oltre

on

  • 1,227 views

Slide e codice della presentazione del 18° workshop dotnetmarche

Slide e codice della presentazione del 18° workshop dotnetmarche

Statistics

Views

Total Views
1,227
Views on SlideShare
1,227
Embed Views
0

Actions

Likes
0
Downloads
25
Comments
2

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

12 of 2 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Codice: dotnetmarche.googlecode.com/​svn/​trunk/​Eventi/​[20110315]%20Raf%20e%20Alk/​Materiale/​1%20-%20Linq%20ed%20oltre.zip
    Are you sure you want to
    Your message goes here
    Processing…
  • Video: http://vimeo.com/21137165
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Linq ed oltre Linq ed oltre Presentation Transcript

    • LINQ edoltre
      Verso 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 LINQ
      Rinforzare le basi non fa mai male
      Iniziamo sul leggero, perchè poi c’è Raf 
    • Anonymousdelegate
      Lambda expression
      • Sebbene 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
    • LINQ
      • Vedremo 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 LINQ
    • Possibilegenesi di LINQ
    • Lambda expression
      Lambda expression
      • A 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 expression
      Lambda expression
      • Questa «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 Tree
      Lambda expression
      +
      5 * 1 + 4
      4
      *
      5
      1
    • Expression Tree .NET
      Lambda expression
      Quella appena vista è una ExpressionTree relativa ad una espressione numerica
      Una 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 .NET
      Lambda expression
      o.Customer.Name.StartsWith("A")
      Lambda
      Esprime la chiamata a funzione StartsWith, necessita di un oggetto su cui chiamarlo e di una serie di parametri, in questo caso la stringa “A”
      Call
      Member Access
      Constant
      L’unico parametro del metodo StartsWith()
      Nel primo ramo si indica l’oggetto su cui va invocata la funzione.
      Member Access
      Accesso al membro Name dell’oggetto Customer
      Accesso al membro Customer dell’oggetto Order.
      Parameter
      Il parametro della query, l’ordine o.
    • Expression<Func<int, bool>>
      lambda = num => num < 5;
      Expression Trees
    • Chi usa le Expression Tree
      Lambda expression
      I primi utilizzatori delle ExpressionTree sono i Provider LINQ
      Un provider LINQ implementa la IQueryable<T> per tradurre una query LINQ in un qualcosa comprensibile alla sorgente
      ES. LINQ to NHibernate converte in query NHibernate, LINQ to LDAP converte in query LDAP, Etc.
    • Provider LINQ
      Lambda expression
      Un provider linq deve quindi solamente tradurre una ExpressionTree in qualche cos’altro
      ExpTree
      SQL
      HQL
      LDAP
      LINQ QUERY
      Compiler
      Provider
    • Provider LINQ
      Lambda 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 LIKE
      Alcuni 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?
    • StaticReflection
      Lambda expression
      • La static reflection è un uso “intelligente” degli expression tree per evitare reflection
    • StaticReflection
    • Compilazione di expressionTree
      Lambda expression
      • Accedere tramite reflection ad un metodo può essere lento.
      • Si possono usare le Expression Tree per generare una funzione dinamicamente
    • Compilazione di expressionTree
      Lambda expression
    • Compilazione di Expression Tree
    • OrderBydinamici su LINQ
      Lambda expression
      • Si ha un repository basato su IQueryable<T>
      • Si vuole ordinare per una proprietà che è passata come stringa
      • L’operatore OrderBy di LINQ non accetta una stringa, ma una Expression Tree
    • OrderBydinamici su LINQ
      Lambda expression
      • La soluzione è generare run-time l’expressiontree che si attenderebbe la OrderBy
      • 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
    • Conclusioni
      Lambda expression
      • Una buona padronanza delle ExpressionTree può aiutare a risolvere problemi “quotidiani”
      • Conoscere le ExpressionTree non è quindi solo appannaggio di chi scrive un provider LINQ
      • Grazie alle Lambda Expression anche in C# si può adottare una programmazione in stile «funzionale»
    • ?
    • CODE