Par Jonathan Barbosa Ingénieurs 2000 – IR 3 Xposé 2010 LINQ : Language-INtegrated Query
Preview:
Citation preview
- Page 1
- Par Jonathan Barbosa Ingnieurs 2000 IR 3 Xpos 2010 LINQ :
Language-INtegrated Query
- Page 2
- Sommaire Xpos 2010 LINQ par Jonathan Barbosa - Ingnieurs 2000 -
IR 3 2 Prsentation Nouveaux concepts Immersion dans le Framework
Commandes avances et prcautions Pour conclure
- Page 3
- Multiplication des langages de requtes LINQ par Jonathan
Barbosa - Ingnieurs 2000 - IR 3 Que doit connaitre un dveloppeur ?
Autres langages SQL XML XPath JQL, Entity SQL, Son langage Xpos
2010 3 Prsentation
- Page 4
- Pourquoi tant de langage ?! LINQ par Jonathan Barbosa -
Ingnieurs 2000 - IR 3 Multiplication des sources de donnes : Purs
Objets (Collections) Bases de donnes relationnelles Entity
Framework XML Autres fichiers structurs Xpos 2010 4
Prsentation
- Page 5
- Anciennes Approches LINQ par Jonathan Barbosa - Ingnieurs 2000
- 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 2010 5 Prsentation
- Page 6
- Anciennes approches (suite) LINQ par Jonathan Barbosa -
Ingnieurs 2000 - IR 3 Entit XPath ObjectQuery customerQuery =
context.Customer.Where("it.City = @city AND it.Country = @country",
new ObjectParameter("city", "Paris"), new
ObjectParameter("country", "France")); XPathDocument doc = new
XPathDocument("customers.xml"); XPathNavigator nav =
doc.CreateNavigator(); XPathNodeIterator it =
nav.Select("/customer[@city='Paris' and @country='France']");
foreach (XPathNavigator c in it) {
parisian.Add(c.GetAttribute("companyName", "")); } Xpos 2010 6
Prsentation
- Page 7
- La solution LINQ LINQ par Jonathan Barbosa - Ingnieurs 2000 -
IR 3 Xpos 2010 7 Prsentation
- Page 8
- Petit historique LINQ par Jonathan Barbosa - Ingnieurs 2000 -
IR 3 Plusieurs projets de recherches de Microsoft Research
join-calculus de Cdric Fournet (INRIA Roquencourt) Polyphonic C#
par Nick Benton, Luca Cardelli et Cdric Fournet Intgration 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 2010 8 Prsentation
- Page 9
- Recherche dans une collection LINQ par Jonathan Barbosa -
Ingnieurs 2000 - 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 rsultat fonctionne dans foreach !!! Xpos 2010 9 Une
syntaxe familire Prsentation
- Page 10
- LINQ ? Language-INtegrated Query LINQ par Jonathan Barbosa -
Ingnieurs 2000 - IR 3 Langage de requtes.NET 3.5 Syntaxe proche de
SQL Approche objet intgre Concept list comprehension Intgr tous les
tats du code Code Source Code IL (Intermediate Language) Runtime
Xpos 2010 10 Prsentation
- Page 11
- LINQ : Comment a marche ? LINQ par Jonathan Barbosa - Ingnieurs
2000 - IR 3 Dabord, du sucre syntaxique Amliore la productivit Une
phase de compilation supplmentaire raccourci vers des mthodes
utilisables Amliore la comprhension Syntaxe plus lourde Xpos 2010
11 Prsentation
- Page 12 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 2010 12 Prsentation">
c.City == "Paris" && c.Country == "F">
- Code || Traduction LINQ par Jonathan Barbosa - Ingnieurs 2000 -
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 2010 12 Prsentation
- Page 13
- Sommaire Xpos 2010 LINQ par Jonathan Barbosa - Ingnieurs 2000 -
IR 3 13 Prsentation Nouveaux concepts Immersion dans le Framework
Commandes avances et prcautions Pour conclure
- Page 14 c.City == "Paris" && c.Co">
- LINQ et son lot de nouveauts LINQ par Jonathan Barbosa -
Ingnieurs 2000 - IR 3 var parisanCustomers = customers.Where(c
=> c.City == "Paris" && c.Country ==
"France").Select(delegate(Customers c) { return new { c.CompanyName
} ; }); Xpos 2010 14 Nouveaux concepts
- Page 15
- Infrence == Magie ? LINQ par Jonathan Barbosa - Ingnieurs 2000
- IR 3 Mcanisme dauto typage Uniquement sur les variables locales
Type : Evaluation de lAST de lexpression 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 2010 15 Nouveaux concepts
- Page 16
- Type anonyme + Initialiseur dobjets LINQ par Jonathan Barbosa -
Ingnieurs 2000 - IR 3 Ecrire rapidement une classe sans mthodes
Types Ad-Hoc : new {[name 1 =] expr 1, ,[name n =] expr n }; name n
ne peut tre typ Infr par le type de lexpression Si name omis
Initialiseur dobjets Gnial pour imiter la projection SQL non ? Xpos
2010 16 Nouveaux concepts
- Page 17 c.CompanyName); Xpos 2010 17 Nouveaux
concepts">
- Mthodes dextension LINQ par Jonathan Barbosa - Ingnieurs 2000 -
IR 3 LINQ sur les tableaux cest possible Nouvelle mthodes sur le
type Array ? Trop complexe intgrer utilisation des mthodes
dextension IEnumerable parisian = new Customer[] { new Customer(),
new Customer() }.Where(c => c.City == "Paris" &&
c.Country == "France").Select(c => c.CompanyName); Xpos 2010 17
Nouveaux concepts
- Page 18
- Mthodes dextension : Dclaration LINQ par Jonathan Barbosa -
Ingnieurs 2000 - IR 3 Greffer des mthodes sur une classe Visibilit
des membres publics uniquement Une simple mthode 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 2010 18 Nouveaux concepts
- Page 19
- Delegate vs Expression ? LINQ par Jonathan Barbosa - Ingnieurs
2000 - IR 3 Reprenons la requte : SELECT * FROM customers et on
boucle en local ? Collections Oui Donnes distantes Inacceptable var
parisanCustomers = customers.Where(c => c.City == "Paris"
&& c.Country == "France").Select(delegate(Customer c) {
return new { c.CompanyName } ; }); Xpos 2010 19 Nouveaux
concepts
- Page 20
- Lambda expression LINQ par Jonathan Barbosa - Ingnieurs 2000 -
IR 3 Rcuprer des langages fonctionnels Syntaxe simple ( [Type 1 ]
arg 1, [Type 2 ] arg 2, , [Type n ] arg n ) => expression Les
types sont optionnels Exemple : Gnre un arbre de lexpression Ou un
delegate c => c.City == "Paris" && c.Country == "France"
Xpos 2010 20 Nouveaux concepts
- Page 21
- Delegate vs Expression : la rponse LINQ par Jonathan Barbosa -
Ingnieurs 2000 - IR 3 Signature Dpend du LINQ provider A la
discrtion du dveloppeur Privilgier les performances Expressions
lambda : A toujours utiliser Uniformiser le code Choix de
conversion (delegate || expression) automatique Xpos 2010 21
Nouveaux concepts
- Page 22
- Sommaire Xpos 2010 LINQ par Jonathan Barbosa - Ingnieurs 2000 -
IR 3 22 Prsentation Nouveaux concepts Immersion dans le Framework
Commandes avances et prcautions Pour conclure
- Page 23
- Un arbre dexpressions ? Un AST ? LINQ par Jonathan Barbosa -
Ingnieurs 2000 - IR 3 Une expression valide : AST de lexpression
Existe la compilation dans tous les langages Disponible uniquement
la compilation sauf en.NET Reprsentation de larbre en runtime
Mmorise le type des donnes Gnrer dynamiquement des requtes de tout
type (SQL, XPath) Parfait pour les expressions lambda Xpos 2010 23
Immersion dans le Framework
- Page 24
- Une requte dans le Framework LINQ par Jonathan Barbosa -
Ingnieurs 2000 - IR 3 Xpos 2010 24 Immersion dans le Framework
- Page 25
- Excution dune requte LINQ par Jonathan Barbosa - Ingnieurs 2000
- IR 3 Exemple : LINQ To Entities Xpos 2010 25 Immersion dans le
Framework
- Page 26
- Sommaire Xpos 2010 LINQ par Jonathan Barbosa - Ingnieurs 2000 -
IR 3 26 Prsentation Nouveaux concepts Immersion dans le Framework
Commandes avances et prcautions Pour conclure
- Page 27
- Liste des clauses LINQ par Jonathan Barbosa - Ingnieurs 2000 -
IR 3 Obligatoires 1 re From Dernire Select ou Group by from c in
customers select c.CompanyName; group c by c.CompanyName; Xpos 2010
27 Commandes avances et prcautions
- Page 28
- Liste des clauses LINQ par Jonathan Barbosa - Ingnieurs 2000 -
IR 3 Facultatives From 0...n en plus Where (filtre) 1 where
expression Join (regroupement) 0n join var in queryable on
jointure_expression OrderBy (trie) 0n orderby var.property
(ascending | descending) Into (stockage intermdiaire) 0n select,
group by et join From intermdiaire into var Et bien dautre encore
Xpos 2010 28 Commandes avances et prcautions
- Page 29
- Les oprateurs (Aggregate) LINQ par Jonathan Barbosa - Ingnieurs
2000 - IR 3 Opration sur un (sous-)ensemble de donnes Avec slecteur
de champs Count Sum Min/Max Average Avec comparateur Distinct Union
Exept Intersect Xpos 2010 29 Commandes avances et prcautions
- Page 30
- Sources derreurs : LINQ to Object LINQ par Jonathan Barbosa -
Ingnieurs 2000 - IR 3 Simple somme en LINQ Problme 2 boucles Select
Sum() Solution : Le slecteur de la mthode Sum() Requte optimise
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 2010 30 Commandes
avances et prcautions
- Page 31
- Sommaire Xpos 2010 LINQ par Jonathan Barbosa - Ingnieurs 2000 -
IR 3 31 Prsentation Nouveaux concepts Immersion dans le Framework
Commandes avances et prcautions Pour conclure
- Page 32
- LINQ to LINQ par Jonathan Barbosa - Ingnieurs 2000 - 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 2010
32 Pour conclure
- Page 33
- Autres implmentation Xpos 2010 LINQ par Jonathan Barbosa -
Ingnieurs 2000 - IR 3 33 Javascript : jLinq JSINQ LINQ to
JavaScript PHPLinq Java : Quaere JaQue JaQu Querydsl Pour
conclure
- Page 34
- Rfrences LINQ par Jonathan Barbosa - Ingnieurs 2000 - IR 3
Excellent cours en anglais sur LINQ :
http://webcourse.cs.technion.ac.il/234319/Spring2009/ho
/WCFiles/09%20LINQ.pdf
http://webcourse.cs.technion.ac.il/234319/Spring2009/ho
/WCFiles/09%20LINQ.pdf MSDN LINQ Home page:
http://msdn.microsoft.com/en-
us/library/bb308961.aspxhttp://msdn.microsoft.com/en-
us/library/bb308961.aspx LINQ attention bien lutiliser :
http://blog.developpez.com/index.php?blog=121&title=lin
q_attention_a_bien_l_utiliser
http://blog.developpez.com/index.php?blog=121&title=lin
q_attention_a_bien_l_utiliser Liste des LINQ providers :
http://en.wikipedia.org/wiki/Language_Integrated_Query
http://en.wikipedia.org/wiki/Language_Integrated_Query Xpos 2010 34
Pour conclure
- Page 35
- Merci de votre attention ! Question ?