Par Jonathan Barbosa Ingénieurs 2000 – IR 3 Xposé 2010 LINQ : Language-INtegrated Query.

Slides:



Advertisements
Présentations similaires
1. Résumé 2 Présentation du créateur 3 Présentation du projet 4.
Advertisements

C#3 et le projet Linq Mitsuru FURUTA
Linq, fonctionnement et architecture
C# 2.0, un an après Mitsuru FURUTA
Proposition de recherches sur ABI (Pro Quest) Lise Herzhaft (Urfist de Lyon) et MH Prévoteau (Bibliothèque Université Paris 2) Mise en forme par Nolwenn.
Corese Moteur de recherche sémantique pour RDF
Le langage de requêtes SPARQL SPARQL Protocol And RDF Query Language
Classe : …………… Nom : …………………………………… Date : ………………..
Les Prepositions.
1 V-Ingénierie… La compétence au service de lexigence… vous présente.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
SQL - Subtilités.
Algèbre relationnelle
Optimisation algébrique de requêtes relationnelles
1 Efficient Data and Program Integration Using Binding Patterns Ioana Manolescu, Luc Bouganim, Francoise Fabret, Eric Simon INRIA.
Les fonctions.
Développement d’applications web
Mitsuru FURUTA Relations techniques développeurs Microsoft France
UNIVERSITE CHOUAIB DOUKKALI Département des mathématiques
Introduction à Entity Framework
Principes de persistance dans les applications orienté objet
1 SERVICE PUBLIC DE LEMPLOI REGION ILE DE France Tableau de bord Juillet- Août 2007.
Développement dapplication avec base de données Semaine 1 : Présentation dEntity Framework Automne 2013.
L’utilisation des bases de données
Projet poker 1/56. Introduction Présentation de léquipe Cadre du projet Enjeux Choix du sujet 2.
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Développement d’application web
Veille Technologique : Étudier les avantages et inconvénients du typage statique et du typage dynamique pour des applications interactives Sujet proposé.
Microsoft .NET.
1 PHP 1.Langage PHP 1.1. Types de base, variables et constantes 1.2. Opérateurs et expressions 1.3. Instructions 1.4. Fonctions 2.Accès aux bases de données:
Notre calendrier français MARS 2014
3ème partie: les filtres
COURS DE PROGRAMMATION ORIENTEE OBJET :
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure dInformatique (ESI) Plate-forme.NET.
C'est pour bientôt.....
Veuillez trouver ci-joint
Initiation aux bases de données et à la programmation événementielle
Chapitre 3 Les bibliothèques de balises JSP et la JSTL
EPID-CPI-ISAIP Philippe Bancquart - mise à jour 24/02/ page 1 SQL jointure PHILIPPE BANCQUART.
2 Développer, tester et déployer un site web avec WebMatrix (RIA101) Christine Dubois 9 février 2011.
LA GESTION COLLABORATIVE DE PROJETS Grâce aux outils du Web /03/2011 Académie de Créteil - Nadine DUDRAGNE 1.
NET LINQ, ADO Vnext, Orcas,… Pierre COUZY Stéphane GOUDEAU Architecte en Système d’information Division Plateformes et Ecosystème Microsoft France.
Entity Framework 4 Mitsuru FURUTA Relations techniques développeurs
2 Industrialisation des développements sur SQL Server avec Visual Studio 2010 Mardi 8 Février – 17h30 Karim Zegour – Winwise Michel Perfetti – MVP VS.
Développement d’application avec base de données
JEE 5 F.Pfister 2 institut eerie JEE – Une plateforme serveur  Développement et exécution d'applications réparties.
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
Développement Web Open Source haXe et les outils « open source » Première partie.
Traitement de différentes préoccupations Le 28 octobre et 4 novembre 2010.
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
* Source : Étude sur la consommation de la Commission européenne, indicateur de GfK Anticipations.
Introduction au langage PHP Licence Pro Cours Internet / Intranet Utilité Historique Exemples Fonctions PHP Classes.
CALENDRIER-PLAYBOY 2020.
Linq & les expressions lambda. L Language In Integrated Q Query.
Projet de stage d’année IIR4 sous le thème:
Initiation MS Access 2010 Requêtes - Sélection (travail en autonomie)
1 Nestlé – Optifibre Zones administrables via le back-office.
Traduction des opérations sous MySQL
Les Chiffres Prêts?
Cours n°4M2. ESCE (S. Sidhom) Séminaire ( 6-12 Février 2007 ) Promo. M2 ESCE-Tunis 2006/07 Conception d’un système d'information sur Internet Architecture.
Médiathèque de Chauffailles du 3 au 28 mars 2009.
22 Visual Studio Tools et Office 2010 Thomas LEBRUN Architecte Access It Sebastien BOVO Application Dev Consultant Microsoft France
AngularJS.
Optimisation de requêtes
 Formulaires HTML : traiter les entrées utilisateur
Quinio1 Bases de données : modèlisation et SGBD Séance 3 B Quinio.
Transcription de la présentation:

Par Jonathan Barbosa Ingénieurs 2000 – IR 3 Xposé 2010 LINQ : Language-INtegrated Query

Sommaire Xposé 2010 LINQ par Jonathan Barbosa - Ingénieurs IR 3 2 Présentation Nouveaux concepts Immersion dans le Framework Commandes avancées et précautions Pour conclure…

Multiplication des langages de requêtes LINQ par Jonathan Barbosa - Ingénieurs IR 3 Que doit connaitre un développeur ? Autres langages SQL XML XPath JQL, Entity SQL, … Son langage Xposé Présentation

Pourquoi tant de langage ?! LINQ par Jonathan Barbosa - Ingénieurs IR 3 Multiplication des sources de données : Purs Objets (Collections) Bases de données relationnelles Entity Framework XML Autres fichiers structurés … Xposé Présentation

Anciennes Approches LINQ par Jonathan Barbosa - Ingénieurs IR 3 Collections & boucles : BDD & DataSet List parisian = new List (); foreach (Customer c in GetCustomerList()) { if (c.City == "Paris" && c.Country = "France") { parisian.add(c.CompanyName); } //... (overture de la base) SqlDataAdapter MyAdapter = new SqlDataAdapter("SELECT product_name, units_in_stock, unit_price FROM Customers as c WHERE c.city='Paris' AND c.country='France'", connection); DataSet ds = new DataSet(); MyAdapter.Fill(ds); //... (Fermeture de la base & traitement) Xposé Présentation

Anciennes approches (suite) LINQ par Jonathan Barbosa - Ingénieurs IR 3 Entité XPath ObjectQuery customerQuery = context.Customer.Where("it.City AND it.Country new ObjectParameter("city", "Paris"), new ObjectParameter("country", "France")); XPathDocument doc = new XPathDocument("customers.xml"); XPathNavigator nav = doc.CreateNavigator(); XPathNodeIterator it = foreach (XPathNavigator c in it) { parisian.Add(c.GetAttribute("companyName", "")); } Xposé Présentation

La solution LINQ LINQ par Jonathan Barbosa - Ingénieurs IR 3 Xposé Présentation

Petit historique LINQ par Jonathan Barbosa - Ingénieurs IR 3 Plusieurs projets de recherches de Microsoft Research join-calculus de Cédric Fournet (INRIA Roquencourt) Polyphonic C# par Nick Benton, Luca Cardelli et Cédric Fournet Intégration au projet C  (c omega ou comega language) 19 novembre 2007 : LINQ dans le Framework 3.5 (Anders Hejlsberg) A venir : PLINQ in parallel FX Library Xposé Présentation

Recherche dans une collection LINQ par Jonathan Barbosa - Ingénieurs IR 3 IEnumerable parisian = from c in new Customer[] { new Customer(), new Customer() } where c.City == "Paris" && c.Country == "France" select c.CompanyName; Pas de boucle ? Le résultat fonctionne dans foreach !!! Xposé Une syntaxe familière… Présentation

LINQ ? Language-INtegrated Query LINQ par Jonathan Barbosa - Ingénieurs IR 3 Langage de requêtes.NET 3.5 Syntaxe proche de SQL Approche objet intégrée Concept « list comprehension » Intégré à tous les états du code Code Source Code IL (Intermediate Language) Runtime Xposé Présentation

LINQ : Comment ça marche ? LINQ par Jonathan Barbosa - Ingénieurs IR 3 D’abord, du « sucre » syntaxique… Améliore la productivité Une phase de compilation supplémentaire … raccourci vers des méthodes utilisables Améliore la compréhension Syntaxe plus lourde Xposé Présentation

Code || Traduction LINQ par Jonathan Barbosa - Ingénieurs IR 3 var parisanCustomers = customers.Where(c => c.City == "Paris" && c.Country == "France").Select(c => new { c.CompanyName }); var parisanCustomers = from c in customers where c.City == "Paris" && c.Country == "France" select new { c.CompanyName }; var parisanCustomers = customers.Where(delegate(Customers c) { return c.City == "Paris" && c.Country == "France" }).Select(delegate(Customers c) { return new { c.CompanyName } ; }); Xposé Présentation

Sommaire Xposé 2010 LINQ par Jonathan Barbosa - Ingénieurs IR 3 13 Présentation Nouveaux concepts Immersion dans le Framework Commandes avancées et précautions Pour conclure…

LINQ et son lot de nouveautés LINQ par Jonathan Barbosa - Ingénieurs IR 3 var parisanCustomers = customers.Where(c => c.City == "Paris" && c.Country == "France").Select(delegate(Customers c) { return new { c.CompanyName } ; }); Xposé Nouveaux concepts

Inférence == Magie ? LINQ par Jonathan Barbosa - Ingénieurs IR 3 Mécanisme d’auto typage Uniquement sur les variables locales Type : Evaluation de l’AST de l’expression var aString = "Paris"; // "Paris" est de type string donc aString aussi var res = from x select new {a, b}; // res est de type IEnumerable Console. WriteLine(res.Current.a) // Comment est ce possible, on ne connais pas le type ??? Xposé Nouveaux concepts

Type anonyme + Initialiseur d’objets LINQ par Jonathan Barbosa - Ingénieurs IR 3 Ecrire rapidement une classe sans méthodes Types Ad-Hoc : new {[name 1 =] expr 1, …,[name n =] expr n }; name n ne peut être typé  Inféré par le type de l’expression Si name omis  Initialiseur d’objets Génial pour imiter la projection SQL non ? Xposé Nouveaux concepts

Méthodes d’extension LINQ par Jonathan Barbosa - Ingénieurs IR 3 LINQ sur les tableaux c’est possible Nouvelle méthodes sur le type Array ? Trop complexe à intégrer  utilisation des méthodes d’extension IEnumerable parisian = new Customer[] { new Customer(), new Customer() }.Where(c => c.City == "Paris" && c.Country == "France").Select(c => c.CompanyName); Xposé Nouveaux concepts

Méthodes d’extension : Déclaration LINQ par Jonathan Barbosa - Ingénieurs IR 3 Greffer des méthodes sur une classe Visibilité des membres publics uniquement Une simple méthode static dans une classe Pourquoi deux signatures pour Where ? public static IEnumerable Where (this IEnumerable collection, Func predicate); public static IEnumerable Where (this IEnumerable, Expression > expr); OU Xposé Nouveaux concepts

Delegate vs Expression ? LINQ par Jonathan Barbosa - Ingénieurs IR 3 Reprenons la requête : « SELECT * FROM customers » et on boucle en local ? Collections  Oui Données distantes  Inacceptable… var parisanCustomers = customers.Where(c => c.City == "Paris" && c.Country == "France").Select(delegate(Customer c) { return new { c.CompanyName } ; }); Xposé Nouveaux concepts

Lambda expression LINQ par Jonathan Barbosa - Ingénieurs IR 3 Récupérer des langages fonctionnels Syntaxe simple ( [Type 1 ] arg 1, [Type 2 ] arg 2, …, [Type n ] arg n ) => expression Les types sont optionnels Exemple : Génère un arbre de l’expression Ou un delegate c => c.City == "Paris" && c.Country == "France" Xposé Nouveaux concepts

Delegate vs Expression : la réponse LINQ par Jonathan Barbosa - Ingénieurs IR 3 Signature Dépend du LINQ provider A la discrétion du développeur Privilégier les performances Expressions lambda : A toujours utiliser Uniformiser le code Choix de conversion (delegate || expression) automatique Xposé Nouveaux concepts

Sommaire Xposé 2010 LINQ par Jonathan Barbosa - Ingénieurs IR 3 22 Présentation Nouveaux concepts Immersion dans le Framework Commandes avancées et précautions Pour conclure…

Un arbre d’expressions ? Un AST ? LINQ par Jonathan Barbosa - Ingénieurs IR 3 Une expression valide : AST de l’expression Existe à la compilation dans tous les langages Disponible uniquement à la compilation… … sauf en.NET Représentation de l’arbre en runtime Mémorise le type des données Générer dynamiquement des requêtes de tout type (SQL, XPath) Parfait pour les expressions lambda Xposé Immersion dans le Framework

Une requête dans le Framework LINQ par Jonathan Barbosa - Ingénieurs IR 3 Xposé Immersion dans le Framework

Exécution d’une requête LINQ par Jonathan Barbosa - Ingénieurs IR 3 Exemple : LINQ To Entities Xposé Immersion dans le Framework

Sommaire Xposé 2010 LINQ par Jonathan Barbosa - Ingénieurs IR 3 26 Présentation Nouveaux concepts Immersion dans le Framework Commandes avancées et précautions Pour conclure…

Liste des clauses LINQ par Jonathan Barbosa - Ingénieurs IR 3 Obligatoires 1 ère From Dernière Select ou Group by from c in customers … … select c.CompanyName;… group c by c.CompanyName; Xposé Commandes avancées et précautions

Liste des clauses LINQ par Jonathan Barbosa - Ingénieurs IR 3 Facultatives From  0...n en plus Where (filtre)  1 where expression Join (regroupement)  0…n join var in queryable on jointure_expression OrderBy (trie)  0…n orderby var.property (ascending | descending) Into (stockage intermédiaire)  0…n select, group by et join From intermédiaire into var Et bien d’autre encore… Xposé Commandes avancées et précautions

Les opérateurs (Aggregate) LINQ par Jonathan Barbosa - Ingénieurs IR 3 Opération sur un (sous-)ensemble de données Avec sélecteur de champs Count Sum Min/Max Average Avec comparateur Distinct Union Exept Intersect Xposé Commandes avancées et précautions

Sources d’erreurs : LINQ to Object LINQ par Jonathan Barbosa - Ingénieurs IR 3 Simple somme en LINQ Problème  2 boucles Select Sum() Solution : Le sélecteur de la méthode Sum() Requête optimisée avec LINQ to ADO.NET et LINQ to XML int totalStock = (from p in products select p.UnitsInStock).Sum(); int totalStock = products.Sum(p => p.UnitsInStock); Xposé Commandes avancées et précautions

Sommaire Xposé 2010 LINQ par Jonathan Barbosa - Ingénieurs IR 3 31 Présentation Nouveaux concepts Immersion dans le Framework Commandes avancées et précautions Pour conclure…

LINQ to … LINQ par Jonathan Barbosa - Ingénieurs IR 3 ADO.NET Data Services Oracle, MySQL, PostgreSQL, SQLite, Ingres, Microsoft SQL Server Entities (Entity Framework) System Search (Windows Search) Google (Search) NHibernate CSV Twitter … Xposé Pour conclure…

Autres implémentation Xposé 2010 LINQ par Jonathan Barbosa - Ingénieurs IR 3 33 Javascript : jLinq JSINQ LINQ to JavaScript PHPLinq Java : Quaere JaQue JaQu Querydsl Pour conclure…

Références LINQ par Jonathan Barbosa - Ingénieurs IR 3 Excellent cours en anglais sur LINQ : /WCFiles/09%20LINQ.pdf /WCFiles/09%20LINQ.pdf MSDN LINQ Home page: us/library/bb aspxhttp://msdn.microsoft.com/en- us/library/bb aspx LINQ « attention à bien l’utiliser » : q_attention_a_bien_l_utiliser q_attention_a_bien_l_utiliser Liste des LINQ providers : Xposé Pour conclure

Merci de votre attention ! Question ?