$30 off During Our Annual Pro Sale. View Details »

Le Projet LINQ – Language Integrated Query

Le Projet LINQ – Language Integrated Query

Adrian Kosmaczewski

April 05, 2006
Tweet

More Decks by Adrian Kosmaczewski

Other Decks in Technology

Transcript

  1. View Slide

  2. Le Projet LINQ
    Language Integrated Query
    Adrian Kosmaczewski
    Solutions Architect
    Application Services
    Getronics Suisse S.A.
    Adrian Kosmaczewski
    Solutions Architect
    Application Services
    Getronics Suisse S.A.

    View Slide

  3.  Leader International en Technologies de
    Communication et d’Information
     Experts en architecture d’application, design et
    développent
     Fournisseur intégral, de l’analyse au support

    View Slide

  4. Adrian Kosmaczewski
     Développeur Web
    depuis 1996
     Développeur .NET
    depuis 2002
     Trainer depuis 2003
     Software Architect
    depuis 2004
     Blog
     http://www.kosmaczewski.net/blogs/tech/
     Argentin depuis toujours

    View Slide

  5. Problème:
    Données != Objets

    View Slide

  6. Le Projet LINQ
    Opérateurs
    Standard
    de Requête
    Objets
    DLinq
    (ADO.NET)
    XLinq
    (System.Xml)






    XML
    .NET Language Integrated Query
    C# 3.0 VB 9.0 Autres…
    SQL WinF
    S

    View Slide

  7. LINQ et C# 3.0

    View Slide

  8. Nouveautés dans C# 3.0
    var contacts =
    from c in clients
    where c.Canton == “GE"
    select new { c.Nom, c.Telephone };
    var contacts =
    clients
    .Where(c => c.Canton == “GE")
    .Select(c => new { c.Nom, c.Telephone });
    Méthodes
    d’extensio
    n
    Expressions
    Lambda
    Expressions
    de Recherche
    Initialisateu
    rs d’objet
    Types
    Anonymes
    Inférence du
    type des
    variables
    locales

    View Slide

  9. Opérateurs Standard de Requête
    Restriction Where
    Projection Select, SelectMany
    Ordre OrderBy, ThenBy
    Regroupement GroupBy
    Quantification Any, All
    Partitionnement Take, Skip, TakeWhile, SkipWhile
    Ensemble Distinct, Union, Intersect, Except
    Elements First, FirstOrDefault, ElementAt
    Aggregation Count, Sum, Min, Max, Average
    Conversion ToArray, ToList, ToDictionary
    Casting OfType

    View Slide

  10. Exécution de Recherche Reportée
    Customer[] clients = SampleData.GetClients();
    clients
    Phone
    Name
    ID
    var requete = from c in clients where c.Ville == “Genève" select
    c.Nom;
    var requete = clients.Where(c => c.Ville == “Genève").Select(c
    => c.Nom);
    Select
    c =>
    c.Nom
    string[] noms = requete.ToArray();
    noms
    c => c.Ville ==
    "London"
    Where

    View Slide

  11. DLinq pour Données Relationnelles
    SqlConnection c = new SqlConnection(…);
    c.Open();
    SqlCommand cmd = new SqlCommand(
    @"SELECT c.Nom, c.Telephone
    FROM Clients c
    WHERE c.Ville = @p0");
    cmd.Parameters.AddWithValue("@p0",
    “Genève“);
    DataReader dr = c.Execute(cmd);
    while (dr.Read()) {
    string nom = dr.GetString(0);
    string telephone = dr.GetString(1);
    DateTime date = dr.GetDateTime(2);
    }
    dr.Close();
    Accès au données, aujourd’hui
    Requête
    entre
    guillemets
    Arguments
    faiblement
    liés
    Resultats non
    typés
    Pas de contrôle
    de la part du
    compilateur

    View Slide

  12. DLinq pour Données Relationnelles
    public class Client { … }
    public class Northwind: DataContext
    {
    public Table Clients;

    }
    Northwind db = new Northwind(…);
    var contacts =
    from c in db.Clients
    where c.Ville == “Genève"
    select new { c.Nom, c.Telephone };
    Accès au données avec DLinq
    Données
    décrites par
    des classes
    Connections
    fortement
    typées
    Syntaxe de
    requête
    intégrée
    Résultats
    fortement
    typés
    Tables
    comme
    collections

    View Slide

  13.  Accès aux données intégrée au langage
     Fait correspondre tables et lignes a classes et
    objets
     Utilise ADO.NET et System.Transactions
     Correspondances
     Codifiées par attributs
     Les relations correspondent à des propriétés
     Persistance
     Management automatique des changements
     Mises à jour à travers de SQL ou des stored
    procedures
    DLinq pour Données Relationnelles

    View Slide

  14. XLinq pour Données XML
    XmlDocument doc = new XmlDocument();
    XmlElement contacts = doc.CreateElement("contacts");
    foreach (Client c in clients)
    if (c.Country == “CH") {
    XmlElement e = doc.CreateElement("contact");
    XmlElement nom = doc.CreateElement(“nom");
    nom.InnerText = c.Nom;
    e.AppendChild(nom);
    XmlElement telephone =
    doc.CreateElement(“telephone");
    telephone.InnerText = c.Telephone;
    e.AppendChild(telephone);
    contacts.AppendChild(e);
    }
    doc.AppendChild(contacts);
    Développer XML aujourd’hui


    Getronics
    (021) 811
    1319



    Modèle
    impératif
    Centré sur le
    document
    Pas de
    requêtes
    intégrées
    Haute
    consommatio
    n de
    mémoire

    View Slide

  15. XLinq pour Données XML
    XElement contacts = new XElement("contacts",
    from c in clients
    where c.Pays == "CH"
    select new XElement("contact",
    new XElement("nom", c.Nom),
    new XElement("telephone", c.Telephone)
    )
    );
    Développer XML avec XLinq
    Model
    déclaratif
    Centré sur
    les éléments
    Requêtes
    intégrées
    Plus petit et
    plus rapide

    View Slide

  16. XLinq pour Données XML
     Requêtes XML intégrées dans le langage
     Toute la puissance de XPath / XQuery
     Mais avec C# ou VB comme langage
     Basé sur l’expérience DOM
     Centré sur les éléments, pas sur le document
     Construction fonctionnelle
     Les nodes de texte sons simplement des
    strings
     Support pour namespaces XML simplifié
     Plus petit et plus rapide

    View Slide

  17. DLinq et XLinq

    View Slide

  18. Le Projet LINQ
     Language Integrated Query for .NET
     Langage de requête natif pour C# 3.0 et VB
    9.0
     Opérateurs de requête standards
     Requêtes similaires à SQL pour toute
    collection .NET
     DLinq
     « Query enabled data access framework »
     XLinq
     Query enabled, smaller, faster XML DOM

    View Slide

  19. LINQ vs. “les autres”
     OODBMS
     Aujourd’hui on peut dire: échec
     Politiquement: investissements déjà faits en
    modèles relationnels
     Techniquement: Problèmes de réutilisation
     Interfaces: ODBC, JDBC, ADO.NET…
     Reproduction d’une base de données en
    mémoire
     SQL éparpillé dans le code
     Requêtes ou appels à des stored procedures

    View Slide

  20.  Génération de Code
     Problème de maintenance…
     Généralement non accepté dans
    l’environnement corporate
     Peu de contrôle
     Embedded SQL (SQLJ)
     Variante de Java
     Pas trop diffusée
    LINQ vs. “les autres”
    #sql public iterator CustomerIter (int, String, String);
    // Declare and initialize host variables
    int id=0; String name=null; String city=null;
    // Declare an iterator instance
    CustomerIter custs;
    #sql custs = { SELECT CustomerId, CompanyName, City FROM Customers };
    while (true) {
    #sql { FETCH :custs INTO :id, :name, :city };
    if (custs.endFetch())
    break;
    // Use id, name, city
    }
    custs.close();

    View Slide

  21.  (N)Hibernate – EJB 3.0 – JDO 2.0
     Très à la mode
     « Active Record » Pattern
     Plusieurs approches
    LINQ vs. “les autres”
    require "rubygems"
    require_gem "activerecord"
    class Customer < ActiveRecord::Base
    end
    customer = Customer.find(123)
    customer.ContactName = "Dave Thomas"
    customer.save
    @Entity
    public class Customer {
    @Id(generate=GeneratorType.NONE) String customerID;
    @Basic String companyName;
    @Basic String address;
    @Basic String city;
    @Basic String country;
    @Basic String phone;
    @OneToMany(targetEntity=com.tedneward.Orders.class,
    mappedBy="customer")
    Collection orders;
    public Customer() { }
    public String getId() { return customerID; }
    // usual collection of get/set pairs go here
    }

    View Slide

  22. Et LINQ?
     Ce n’est pas la réponse finale
     Elévation de requêtes et relations au
    niveau classes et objets
     « Type safety » et vérification statique de
    types
     Seulement pour SQL Server
     Pour le moment

    View Slide

  23. Avantages de LINQ
     Modèle unifié de requête pour objets,
    données relationnelles et XML
     Vérification de types et Intellisense pour
    les requêtes
     Le pouvoir de SQL et XQuery directement
    dans C# et VB
     Extensibilité pour d’autres langages ou
    APIs
    http://msdn.microsoft.com/netframework/future/linq/

    View Slide

  24. Pour plus d’informations
     LINQ Home Page
     http://msdn.microsoft.com/netframework/future/linq/
     C# Future Versions
     http://msdn.microsoft.com/vcsharp/future
     MSDN Magazine (Octobre 2005)
     http://msdn.microsoft.com/msdnmag/issues/05/10/EndBracket/default.aspx

    View Slide

  25. Merci!
    Des questions?

    View Slide

  26. Exclusive, special information on
    Windows Vista and the 2007 Microsoft
    Office release
    Notifications upon availability of new
    beta versions of to download or order
    them as soon as possible
    Product-specific bonus material
    (videos, samples, webcasts, gadgets,
    etc.)
    Your benefits:

    View Slide

  27. © 2006 Microsoft Corporation. All rights reserved.
    This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

    View Slide