Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Le Projet LINQ – Language Integrated Query

Le Projet LINQ – Language Integrated Query

88dd97cf2dc7f06cc51a01d450f0b1e5?s=128

Adrian Kosmaczewski
PRO

April 05, 2006
Tweet

Transcript

  1. None
  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.
  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
  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
  5. Problème: Données != Objets

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

    XLinq (System.Xml) <book> <title/> <author/> <year/> <price/> </book> XML .NET Language Integrated Query C# 3.0 VB 9.0 Autres… SQL WinF S
  7. LINQ et C# 3.0

  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
  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<T>
  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
  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
  12. DLinq pour Données Relationnelles public class Client { … }

    public class Northwind: DataContext { public Table<Client> 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
  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
  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 <contacts> <contact> <nom>Getronics</nom> <telephone>(021) 811 1319</telephone> </contact> … </contacts> Modèle impératif Centré sur le document Pas de requêtes intégrées Haute consommatio n de mémoire
  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
  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
  17. DLinq et XLinq

  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
  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
  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();
  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 }
  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
  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/
  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
  25. Merci! Des questions?

  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:
  27. © 2006 Microsoft Corporation. All rights reserved. This presentation is

    for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.