C#3 et le projet Linq Mitsuru FURUTA Relations techniques développeurs - Microsoft France mitsufu@microsoft.com – http://blogs.microsoft.fr/mitsufu Pierre LAGARDE Relations techniques développeurs - Microsoft France pierlag@microsoft.com
Rappels sur le framework .Net 2.0 Linq C#3 Pause XLinq DLinq Agenda Introduction Rappels sur le framework .Net 2.0 Linq C#3 Pause XLinq DLinq
Introduction: .Net Language Integrated Query Constat: la maturité des langages objets est atteinte dans l’industrie. Le prochain challenge sera de diminuer la complexité d’accès aux données non objet (principalement les bases de données relationnelles et le Xml). Les technologies actuelles sont multiples: sql, mapping objet-relationnel, DOM, XPath, XQuery, etc… Linq offre une approche d’accès aux données plus générale en ciblant n’importe quel type de source de données Linq exploite les dernières évolutions de C#3 pour mettre en place un tel mécanisme. Linq définit ainsi un standard qui pourra être étendu aux autres langages .Net tels que VB.NET.
Rappels sur le framework .Net 2.0 Générics Classes partielles Méthodes anonymes Délégués simplifiés Types Nullables Rappel sur les énumérations: yield return !!!
Demo Rappels framework 2.0
Dans un avenir proche Linq, DLinq et XLinq Objectifs Unifier l’accès aux données quelque soit sa source Langage de requête objet quelque soit sa provenance Les technologies Linq : langage de manipulation de données XLinq : extension spécifique de Linq pour le formalisme XML DLinq : extension spécifique de Linq pour les données SQL
Linq Les évolutions Query Expression Possibilité d’exprimer une requête directement dans le code Type inference Déduction à la compilation du type d’un objet Lambda expression Utilisation d’expression Lambda directement dans le code Extension methods Etendre une classe sans en dériver par AOP Anonymous type Construction d’objet sans définition de classe Object initializer Possibilité d’initialiser des données membres à l’initialisation Langages concernés C# v3 et VB.NET v9, mais spécifications ouvertes (C++, Delphi..)
Local variable type inference Dans un avenir proche Query expressions var contacts = from c in customers where c.State == "WA" select new { c.Name, c.Phone }; Local variable type inference Lambda expressions var contacts = customers .Where(c => c.State == "WA") .Select(c => new { c.Name, c.Phone }); Extension methods Anonymous types Object initializers
Demo Process démo
Déclarations explicites Initialisations Types anonymes Méthodes d’extension Expressions lambda
Demo Filter démo
Process démo 2ème Extensions de méthode Exécution différée Demo Process démo 2ème Extensions de méthode Exécution différée
Demo Sample query
DLinq L’accès aux données Les structures de données: Les requêtes DataContext Les requêtes de mise à jour Les structures de données: Les objets « entités » Mapping par attributs Le générateur, le designer Les requêtes L’arborescence d’expressions Un modèle ouvert et extensible
DLinq Helloworld Entity objects DataContext Mises à jour Relations Demo DLinq Helloworld Entity objects DataContext Mises à jour Relations
Expressions: visualiser l’arborescence Demo Expressions: visualiser l’arborescence
Expressions: créer dynamiquement ses expressions Demo Expressions: créer dynamiquement ses expressions
Nouveautés: Générateur/Designer Demo Nouveautés: Générateur/Designer
Demo Sample query