SlideShare une entreprise Scribd logo
LINQDes nouveautés de C#3/VB9 à LINQ et perspectives
A propos… de votre speaker : Gregory Renard [akaRedo] CTO Wygwam, www.wygwam.com
 Bureau d’étude et d’aide à l’acquisition des technologies
 Microsoft RegionalDirector / MVP
 Auteur (2006 – 2007)
Livres/Livres Blancs : .NET 2.0 /3.0/3.5– C#/VB – VS2005/VS2008
Articles/Dossiers Techniques presse francophone
 Communautaire
 Blog : http://blogs.developpeur.org/redo
 Sites : Codes-Sources, ASP-PHP.NET, TechHeadBrothers, MSDN, …
 Speaker Microsoft .NET > 6 ans
 Events MSDN Belgique – Luxembourg
 Events MSDN France
TechDaysFrance, BeLux, Suisse
Wygday
 E-mail : gregory@wygwam.comRoadmapDes nouveautés de C#3/VB9 à LINQ et perspectivesRappel :
.NET Fx, C# 2.0 (VB 8.0)
 Nouveautés des langages
C# v3.0 (VB v9.0)
LINQ
Overview
 PerspectivesRappelVue d’ensemble des évolutions du .NETFx, des langages et de son IDE
De 2002 à 2008Source : http://www.danielmoth.com/Blog/2007/06/visual-studio-2008-stack.html
De 2002 à 2008
.NET Framework 3.5 SP1ADO.NET Entity FrameworkADO.NET Data ServicesASP.NET Dynamic DataWPF & WCF Enhancements.NET Framework 3.5FrameworkLINQWCF\WFEnhancementsAdditional Enhancements.NET Framework 3.0 + SP2WPFWCFWFWindows CardSpace.NET Framework 2.0 + SP2
.NET Framework & Tools Roadmap.NET Framework 3.0.NET Framework 3.5.NET Releases3.5 SP1Silverlight 2.NET 4ASP.NET MVCVisual Studio 2008ASP.NET AJAX 1.0Silverlight 1.0Tools ReleasesVS 2008 SP1VS Tools for SL VS 2005 Ext. for WF
 VS 2005 Ext. for WCF/WPF CTP VS “10”Later..200720082006
Qu’est-ce qui est cool dans.NET 3.5??LinqLinq to objectsLinq to xmlLinq to SqlLinq to datasetLinqLinqDataSource in ASP.NETLinq support in WPF databindingLinqLinq, Linq, …
Qu’est-ce qui est cool dans .NET 3.5??Web applicationsASP.NET AJAX built inApplication Services ExposedListView controlService ApplicationsSyndication object modelWCF support for REST and JSON servicesWCF & WF integrationClient ApplicationExcellent tooling support!UIElement3D Managed Add-in framework (System.AddIn)XBAP support for Firefox
Nouveautés des langagesVue d’ensemble des évolutions de C# 3.0 / VB 9.0 Vue d’ensemble des nouveautés
C# v3.0
VB v9.0C#, son Historique !
C# 3.0, ses objectifs de conception !Intégration d’objets, des données relationnelles et du XMLLINQEnrichissement du langage (C# v1.0, v2.0)Basésur la .NET CLR 2.0	Ajout de nouvellesfonctionnalitésLambda expressionsDétachement du langage des APIs spécifiques100% compatible avec les versions précédentesC# 3.0 peutêtrecomplètementtraduit en C# 2.0
C# 3.0, ses Innovations !Query expressionsvar contacts =    from c in customers    where c.State == "WA"    select new { c.Name, c.Phone };Expression treesLocal variable type inferenceAutomatic propertiesLambda expressionsvar contacts =    customers    .Where(c => c.State == "WA")    .Select(c => new { c.Name, c.Phone });Partial methodsExtension methodsObject initializersAnonymous types
VB, son Historique !
VB 9.0, ses objectifs de conception !Intégration d’objets, des données relationnelles et du XMLLINQ + Intégration XMLAmelioration du langageAmélioration de la syntaxe des tâches typiquesAjout de nouvellesfonctionnalitésLambda expressions
VB 9.0, ses Innovations !Query expressionsDim contacts =From c In customersWhere c.State= "WA"Select New With { Name = c.Name, _                                  Phone = c.Phone }Expression treesImplicitly typed local variableDeep XML supportLambda expressionsDim contacts =customers _    .Where(Function(c) c.State = "WA") _    .Select(Function(c) New With { Name = c.Name, _                                                      Phone = c.Phone })Partial methodsExtension methodsAnonymous typesObject initializers
De C# 3.0 / VB 9.0 à LINQ… en route vers LINQ !!!Rappel C# v2.0  (VB v8.0)
Le pourquoi des nouveautés
 C# v3.0 (VB v9.0)
Des nouveautés à LINQ … 1 pas ?Rappel C# v2.0 – VB v8.0http://msdn2.microsoft.com/en-us/library/7cz8t42e(VS.80).aspx
Rappel C#2.0 / VB 8.0Types Génériques (C#/VB)Classes partielles (C#/VB)Méthodes Anonymes (C#)Itérateurs (C#)Qualificateur global de Namespace (C#)Classes Statiques (C#)Types Nullables (C#)…
Types Generiques (C# - VB)Suppression du boxing/unboxingSuppression du Casting impliciteGestion de l’erreur lors de la compilationMeilleure lisibilité du codeMeilleures performances
Classes partielles (C# - VB)Définition d’une classe  sur plusieurs fichiersUtilité dans la génération de codeExploité par les Winforms et Webforms
Méthodes anonymes (C#)Manière de passer un bloc de code comme paramètre de délégué.Réduction du codage dans l’instanciation de  délégués en éliminant la nécessité de créer une méthode séparée
Méthodes anonymes (C#)public delegate T Func<T, A> (A a)Délégué générique qui représente une fonction à un paramètre
Itérateurs (C#)Méthode, accesseur ou opérateur get permettant de prendre en charge l'itération foreach dans une classe ou une struct sans implémenter l'interface IEnumerable dans son intégralitéExécution différéeMot clé yield return

Contenu connexe

PPTX
Linq Tech Days08 Lux
PPT
Introdot Netc Sharp Fr
PPTX
Visual Studio 2008 Overview
PPTX
Découvrez C# 4.0 et les améliorations apportées à la BCL
PPTX
C# 5 versus Java 8... Quand C++ 11 s'invite à la fête
PPT
Cours Visual Basic.NET
PDF
Chap1: Cours en C++
PDF
Chap1V2019: Cours en C++
Linq Tech Days08 Lux
Introdot Netc Sharp Fr
Visual Studio 2008 Overview
Découvrez C# 4.0 et les améliorations apportées à la BCL
C# 5 versus Java 8... Quand C++ 11 s'invite à la fête
Cours Visual Basic.NET
Chap1: Cours en C++
Chap1V2019: Cours en C++

Tendances (20)

PDF
Chapitre4: Pointeurs et références
DOC
Le langage C
PDF
C++ Metaprogramming : multidimensional typelist
PDF
Programmation en C
PDF
Chap 6 : classes et interfaces
PDF
Les fondamentaux de langage C#
PPT
Formation C# - Cours 3 - Programmation objet
PDF
Partie 13: Héritage Multiple — Programmation orientée objet en C++
PDF
Partie 11: Héritage — Programmation orientée objet en C++
PDF
Cours de programmation en c
PDF
Partie 2: Types, Variables, Opérateurs — Programmation orientée objet en C++
PDF
Partie 9: Fonctions Membres — Programmation orientée objet en C++
PDF
Partie 10: Classes Génériques — Programmation orientée objet en C++
PDF
Cours structures des données (langage c)
PPT
Le langage C
PPTX
C++11 en 12 exemples simples
PDF
Partie 12: Polymorphisme — Programmation orientée objet en C++
PDF
Langage C
PDF
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++
PDF
Cours langage-c
Chapitre4: Pointeurs et références
Le langage C
C++ Metaprogramming : multidimensional typelist
Programmation en C
Chap 6 : classes et interfaces
Les fondamentaux de langage C#
Formation C# - Cours 3 - Programmation objet
Partie 13: Héritage Multiple — Programmation orientée objet en C++
Partie 11: Héritage — Programmation orientée objet en C++
Cours de programmation en c
Partie 2: Types, Variables, Opérateurs — Programmation orientée objet en C++
Partie 9: Fonctions Membres — Programmation orientée objet en C++
Partie 10: Classes Génériques — Programmation orientée objet en C++
Cours structures des données (langage c)
Le langage C
C++11 en 12 exemples simples
Partie 12: Polymorphisme — Programmation orientée objet en C++
Langage C
Partie 7: Evolution du Modèle Objet — Programmation orientée objet en C++
Cours langage-c
Publicité

En vedette (20)

PDF
Revisió palic.Marc teòric de referencia
PDF
XebiConFr 15 - Comment manager des geeks
PPT
PDF
Comunidad de David de Ugarte
PDF
Manejo básico netvibes
PPT
PPT
PPTX
L'orientation après la seconde au lycée louise michel 2
ODP
Nanec open sim
PDF
Agile france 2013 - Dette Technique
PPTX
Axe 2 : innovation - Frecnhsouth.digital
PPTX
Poême la vie en théorèmes
PPT
Enquête 2011 - Vous, votre organisation et Agile
PDF
Dossier de Presse - Decilab
PDF
02 desarrollodesoftwarecomoingenieria isi
PPT
OPEN DATA WEEK // Plénière 2 : Fédérer les acteurs culture/ Tourisme autour d...
PPS
Petite annonce ms
PDF
Revuepresse30.03
PPT
2 Expo De Compo IX
PPT
Analyse de Fiches Voyages
Revisió palic.Marc teòric de referencia
XebiConFr 15 - Comment manager des geeks
Comunidad de David de Ugarte
Manejo básico netvibes
L'orientation après la seconde au lycée louise michel 2
Nanec open sim
Agile france 2013 - Dette Technique
Axe 2 : innovation - Frecnhsouth.digital
Poême la vie en théorèmes
Enquête 2011 - Vous, votre organisation et Agile
Dossier de Presse - Decilab
02 desarrollodesoftwarecomoingenieria isi
OPEN DATA WEEK // Plénière 2 : Fédérer les acteurs culture/ Tourisme autour d...
Petite annonce ms
Revuepresse30.03
2 Expo De Compo IX
Analyse de Fiches Voyages
Publicité

Similaire à Vs2008 Linq (20)

PPTX
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
PPT
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
PPT
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
PPTX
De Java à .NET
PPTX
NouveautéS De Visual Basic 2010 V2
PPT
Dotnet csharp
PPTX
Ta Visual Studio2008 Vb9 C#3
PPTX
Le langage C# de Microsoft .
ODP
Programmation événementielle avec VB (ISIG)
PDF
intro-csharp developement master 2 IF APP
PPTX
PPTX
Cours VB 2012 seance 1
PDF
PDF
02 visual basic .net - introduction a vb .net
PPTX
c# programmation orientée objet (Classe & Objet)
PPTX
C# langage & syntaxe
PPT
Le Developpement Web Aspnet2 Vb2005
PPTX
memento_java_3c.pptx
PPT
Tour Horizont.Net
PDF
Cours c#
 
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
De Java à .NET
NouveautéS De Visual Basic 2010 V2
Dotnet csharp
Ta Visual Studio2008 Vb9 C#3
Le langage C# de Microsoft .
Programmation événementielle avec VB (ISIG)
intro-csharp developement master 2 IF APP
Cours VB 2012 seance 1
02 visual basic .net - introduction a vb .net
c# programmation orientée objet (Classe & Objet)
C# langage & syntaxe
Le Developpement Web Aspnet2 Vb2005
memento_java_3c.pptx
Tour Horizont.Net
Cours c#
 

Plus de Gregory Renard (20)

PPTX
WygDay - Session Innovation xBrainLab
PPTX
WygDay 2010
PPT
PPTX
Approach the future of tourism by the new Technologies
PPTX
Approach the future of cities by the singularity of technologies !
PPTX
Wygday 2009 Session Innovation
PPT
Net 2007 Faire Du E Commerce Dans Les Mv
PPTX
Wygday Session PléNièRe (2)
PPTX
Wygday Session PléNièRe (1)
PPTX
Wygday 2008
PPT
Web Services
PPTX
Vs2008 Breakthrough Software Dev
PPT
Vs2008 Ms Lux
PPTX
Visual Basic 9.0 Trucs Et Astuces Dans Visual Studio 2008
PPT
Visual Basic 9.0 Trucs Et Astuces Dans Visual Studio 2008
PPTX
Techdays Visual Studio 2010
PPT
Starter Kits
PPT
Principes De Base De Asp .Net
PPTX
Part2 CréAtion D’Un Gadget Et Boite à Outils
PPTX
Part1 CréAtion D’Un Gadget Et Boite à Outils
WygDay - Session Innovation xBrainLab
WygDay 2010
Approach the future of tourism by the new Technologies
Approach the future of cities by the singularity of technologies !
Wygday 2009 Session Innovation
Net 2007 Faire Du E Commerce Dans Les Mv
Wygday Session PléNièRe (2)
Wygday Session PléNièRe (1)
Wygday 2008
Web Services
Vs2008 Breakthrough Software Dev
Vs2008 Ms Lux
Visual Basic 9.0 Trucs Et Astuces Dans Visual Studio 2008
Visual Basic 9.0 Trucs Et Astuces Dans Visual Studio 2008
Techdays Visual Studio 2010
Starter Kits
Principes De Base De Asp .Net
Part2 CréAtion D’Un Gadget Et Boite à Outils
Part1 CréAtion D’Un Gadget Et Boite à Outils

Vs2008 Linq

  • 1. LINQDes nouveautés de C#3/VB9 à LINQ et perspectives
  • 2. A propos… de votre speaker : Gregory Renard [akaRedo] CTO Wygwam, www.wygwam.com
  • 3. Bureau d’étude et d’aide à l’acquisition des technologies
  • 5. Auteur (2006 – 2007)
  • 6. Livres/Livres Blancs : .NET 2.0 /3.0/3.5– C#/VB – VS2005/VS2008
  • 9. Blog : http://blogs.developpeur.org/redo
  • 10. Sites : Codes-Sources, ASP-PHP.NET, TechHeadBrothers, MSDN, …
  • 11. Speaker Microsoft .NET > 6 ans
  • 12. Events MSDN Belgique – Luxembourg
  • 13. Events MSDN France
  • 16. E-mail : gregory@wygwam.comRoadmapDes nouveautés de C#3/VB9 à LINQ et perspectivesRappel :
  • 17. .NET Fx, C# 2.0 (VB 8.0)
  • 19. C# v3.0 (VB v9.0)
  • 20. LINQ
  • 22. PerspectivesRappelVue d’ensemble des évolutions du .NETFx, des langages et de son IDE
  • 23. De 2002 à 2008Source : http://www.danielmoth.com/Blog/2007/06/visual-studio-2008-stack.html
  • 24. De 2002 à 2008
  • 25. .NET Framework 3.5 SP1ADO.NET Entity FrameworkADO.NET Data ServicesASP.NET Dynamic DataWPF & WCF Enhancements.NET Framework 3.5FrameworkLINQWCF\WFEnhancementsAdditional Enhancements.NET Framework 3.0 + SP2WPFWCFWFWindows CardSpace.NET Framework 2.0 + SP2
  • 26. .NET Framework & Tools Roadmap.NET Framework 3.0.NET Framework 3.5.NET Releases3.5 SP1Silverlight 2.NET 4ASP.NET MVCVisual Studio 2008ASP.NET AJAX 1.0Silverlight 1.0Tools ReleasesVS 2008 SP1VS Tools for SL VS 2005 Ext. for WF
  • 27. VS 2005 Ext. for WCF/WPF CTP VS “10”Later..200720082006
  • 28. Qu’est-ce qui est cool dans.NET 3.5??LinqLinq to objectsLinq to xmlLinq to SqlLinq to datasetLinqLinqDataSource in ASP.NETLinq support in WPF databindingLinqLinq, Linq, …
  • 29. Qu’est-ce qui est cool dans .NET 3.5??Web applicationsASP.NET AJAX built inApplication Services ExposedListView controlService ApplicationsSyndication object modelWCF support for REST and JSON servicesWCF & WF integrationClient ApplicationExcellent tooling support!UIElement3D Managed Add-in framework (System.AddIn)XBAP support for Firefox
  • 30. Nouveautés des langagesVue d’ensemble des évolutions de C# 3.0 / VB 9.0 Vue d’ensemble des nouveautés
  • 32. VB v9.0C#, son Historique !
  • 33. C# 3.0, ses objectifs de conception !Intégration d’objets, des données relationnelles et du XMLLINQEnrichissement du langage (C# v1.0, v2.0)Basésur la .NET CLR 2.0 Ajout de nouvellesfonctionnalitésLambda expressionsDétachement du langage des APIs spécifiques100% compatible avec les versions précédentesC# 3.0 peutêtrecomplètementtraduit en C# 2.0
  • 34. C# 3.0, ses Innovations !Query expressionsvar contacts = from c in customers where c.State == "WA" select new { c.Name, c.Phone };Expression treesLocal variable type inferenceAutomatic propertiesLambda expressionsvar contacts = customers .Where(c => c.State == "WA") .Select(c => new { c.Name, c.Phone });Partial methodsExtension methodsObject initializersAnonymous types
  • 36. VB 9.0, ses objectifs de conception !Intégration d’objets, des données relationnelles et du XMLLINQ + Intégration XMLAmelioration du langageAmélioration de la syntaxe des tâches typiquesAjout de nouvellesfonctionnalitésLambda expressions
  • 37. VB 9.0, ses Innovations !Query expressionsDim contacts =From c In customersWhere c.State= "WA"Select New With { Name = c.Name, _ Phone = c.Phone }Expression treesImplicitly typed local variableDeep XML supportLambda expressionsDim contacts =customers _ .Where(Function(c) c.State = "WA") _ .Select(Function(c) New With { Name = c.Name, _ Phone = c.Phone })Partial methodsExtension methodsAnonymous typesObject initializers
  • 38. De C# 3.0 / VB 9.0 à LINQ… en route vers LINQ !!!Rappel C# v2.0 (VB v8.0)
  • 39. Le pourquoi des nouveautés
  • 40. C# v3.0 (VB v9.0)
  • 41. Des nouveautés à LINQ … 1 pas ?Rappel C# v2.0 – VB v8.0http://msdn2.microsoft.com/en-us/library/7cz8t42e(VS.80).aspx
  • 42. Rappel C#2.0 / VB 8.0Types Génériques (C#/VB)Classes partielles (C#/VB)Méthodes Anonymes (C#)Itérateurs (C#)Qualificateur global de Namespace (C#)Classes Statiques (C#)Types Nullables (C#)…
  • 43. Types Generiques (C# - VB)Suppression du boxing/unboxingSuppression du Casting impliciteGestion de l’erreur lors de la compilationMeilleure lisibilité du codeMeilleures performances
  • 44. Classes partielles (C# - VB)Définition d’une classe sur plusieurs fichiersUtilité dans la génération de codeExploité par les Winforms et Webforms
  • 45. Méthodes anonymes (C#)Manière de passer un bloc de code comme paramètre de délégué.Réduction du codage dans l’instanciation de délégués en éliminant la nécessité de créer une méthode séparée
  • 46. Méthodes anonymes (C#)public delegate T Func<T, A> (A a)Délégué générique qui représente une fonction à un paramètre
  • 47. Itérateurs (C#)Méthode, accesseur ou opérateur get permettant de prendre en charge l'itération foreach dans une classe ou une struct sans implémenter l'interface IEnumerable dans son intégralitéExécution différéeMot clé yield return
  • 48. Qualificateur global de Namespace (C#)« :: »Résout le membre être caché par une autre entité du même nom.
  • 49. Classes Statiques (C#)Accès sans création d’instancesChargé automatiquement par le CLR
  • 50. Types Nullables (C#)Permet d’avoir des types valeurs nullablesPratique pour les données nullables provenant de bases de données
  • 51. Nouveautés : C# v3.0 / VB 9.0 ?http://msdn2.microsoft.com/en-us/library/bb383815(VS.90).aspx
  • 52. Types implicites / Inférence de types« Var »Déclaration de variable ou Array sans spécifier de typeDéclaration fortement typéeDoit être directement initialiséeVariables locales uniquement
  • 53. Initialisation d’objets simplifiéeDéclaration avec unesyntaxesimplifiée.Initialisationd’objettypé Person p = new Person {Name = "Chris Smith", Age = 31}; Initialisationd’objet avec type anonymevarproductInfos = from p in products select new {p.ProductName, p.UnitPrice};foreach(var p in productInfos){...}Initialisation d’objet avec un type nullable : compile time error !
  • 54. … Initialisation de collections simplifiéeUniquement pour les collection de classes implementant “IEnumerable” List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; List<Test> list = new List<Test> { new Test{ num = 1, s = "Hello"}, new Test{ num = 2, s = "World"}, new Test{ num = 3, s = "From C#"} };
  • 55. … Propriétés automatiquesDéclaration avec unesyntaxesimplifiée.Attributs non permis (utiliseralors la méthoderégulière)
  • 56. Types anonymesTypes automatiquement générés à la compilationvar v = new { Amount = 108, Message = "Hello" };Non disponible dans le code sourceIntellisence disponibleTypiquementutilisédans la clause select des query expressionRepose surl’initialisationd’objet et collections var query = fromprod in Products select new { prod.Color, prod.Price}; foreach(var v in query) { Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price); }
  • 57. Méthodes d’extension Ajout “Virtuel” d’une méthode à un typeMéthode Static : premier paramètre “this”Étend, ne modifie pas le type, override Définition du scope par “using namespaces”
  • 58. Expressions LambdaEcriture inline de méthodesLambda opérateur « => »Simplifications d'écriture des entêtes d'une méthode anonymedelegateint D1(int i); D1 myDelegate1 = x => x + 1; int j = myDelegate1(5); //j = 6Permet d’écrire une fonction dans une expression et de récupérer un pointeur vers la fonctionPossibilité de récupérer un arbre d’expression
  • 59. Expressions LambdaExemplesd’expressions lambda x => x + 1 // Implicitly typed, expression body x => { return x + 1; } // Implicitly typed, statement body (int x) => x + 1 // Explicitly typed, expression body (int x) => { return x + 1; } // Explicitly typed, statement body (x, y) => x * y // Multiple parameters () => Console.WriteLine() // No parameters
  • 60. Expressions LambdaInférence de type dans une Lambdacustomers.Where(c => c.City == "London");Opérateurs de vérificationFunc<int, bool> myFunc = x => x == 5; bool result = myFunc(4); // returns false of courseint[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; intoddNumbers = numbers.Count(n => n % 2 == 1);Ne pas confondre avec l’opérateur “>=“varfirstSmallNumbers = numbers.TakeWhile((n, index) => n >= index);
  • 61. Arbres d’expressionusingSystem.Linq.Expressions;Expression<Func<int, bool>> exprTree = num => num < 5; Les expressions lambda peuvent être traduite Code ILArbre d’expressionsPeuvent être parsés au RuntimeUtilisés au sein des LinqQuery Provider (Linq to SQL)Func<int,int> square = i => i * i;int four = square(2);Expression<Func<int,int>> squareEx = i => i * i;λ*iii
  • 62. ExpressionsUne expression représente l’arbre d’objets qui représente l’expression passée en argument
  • 63. Méthodes PartiellesLes types partiels peuvent maintenant contenir des méthodes partielles partial class Customer { partial void OnCreated() {Console.WriteLine(“Welcome new customer”); } }
  • 65. Types nullablesValid for all value typesDim a As Integer?‘Will be Nothinga = 123a = Nothing‘Boolean HasValue propertyDim hasValue = a.HasValue‘Get the value via Value property or directlyDim value1 As Integer = a.ValueDim value2 As Integer = aWill throw exception if equal to Nothing
  • 66. Types implicites« Dim »Déclaration de variable ou Array sans spécifier de typeDéclaration fortement typéeDoit être directement initialiséeVariables locales uniquement
  • 67. Initialisation d’objetsDéclaration avec unesyntaxesimplifiéeMot clé “With”Initialisationd’objettypé Dim namedCust = New Customer With {.Name = “xxx"}Initialisationd’objet avec type anonyme Dim anonymousCust = New With {.Name = “xxx"}Initialisation d’objet avec un type nullable : compile time error !
  • 68. Types anonymesTypes automatiquement générés à la compilation Dim product1 = New With {.Name = "paperclips", .Price = 1.29}Non disponible dans le code sourceIntellisence disponibleTypiquementutilisédans la clause select des query expressionRepose surl’initialisationd’objet
  • 69. Types anonymes : Key PropertiesComparaison de deux types anonymes (Key)Que les « Key » sont comparéesLes valeurs des « Key » sont :Read-OnlyNe peuvent être changéesSeule la valeur d'une propriété « Key » est incluse dans l'algorithme compilateur produisant le code du type anonyme.
  • 70. RelaxedDelegatesVraie relaxation : les paramètres ne sont pas employés, vous pouvez ne pas les utiliser. Dim WithEventsbtn As New Button()SubBOnClick(ByValsender As Object, ByVal e As EventArgs) Handlesbtn.ClickMessageBox.Show("Hello World from" & btn.Text) End SubSubRelaxedOnClick() Handlesbtn.ClickMessageBox.Show("Hello World from" & btn.Text) End Sub
  • 71. Méthodes d’extension Ajout “Virtuel” d’une méthode à un typeExtension attribute <Extension()> de l’espace de nom System.Runtime.CompilerServicesÉtend, ne modifie pas le type, override Définition du scope par “imports namespaces”
  • 72. Expressions LambdaEcriture inline de méthodes Dim fnums = numbers.Where(Function(n) n < 5)Lambda opérateur « Function »Simplifications d'écriture des entêtes d'une méthode anonymePermet d’écrire une fonction dans une expression et de récupérer un pointeur vers la fonctionPossibilité de récupérer un arbre d’expression
  • 73. Meilleur support XMLModèle hiérarchique de programmation simplifiéImports <xmlns:ns=“http://myNamespace/schema”>Dim books = <books> <book Title=“Welcome to VB 9.0”> <author Name=“Bart”> <origin>Belgium</origin> </author> </book> </books>For Each book in books.<book> Console.WriteLine(book.@Title); Console.WriteLine(book.<author>.@Name); Console.WriteLine(book...<origin>);NextInline XMLChild axis .< (for iteration)Attribute axis (.@)Descendant axis …search in all descendants
  • 74. Meilleur support xmlLINQ queryDimcountriesWithCapital = _<Countries><%=From country In Countries, city In Capitals _ Wherecountry.Name = city.Country _Select _<CountryName=<%=country.Name%>Density=<%=country.Population / country.Area%>><Capital><Name><%=city.Name%></Name><Longitude><%=city.Longitude%></Longitude><Latitude><%=city.Latitude%></Latitude></Capital></Country> _%></Countries>ASP-alike embedded expressions
  • 75. Autres amélioration VB v 9.0Friend assembliesInternalsVisibleTo attribute recognizedRuntime agilityCompile without Microsoft.VisualBasic.dllNeed originates from CF and SilverlightNew /vbruntime switchImproved generic type inferencingCalling Object members on interfaces
  • 76. Et là … « LINQ » !Des nouveauté s à LINQ (.NET Language-IntegratedQuery) : un pas ?http://msdn2.microsoft.com/fr-fr/netframework/aa904594.aspx
  • 77. LINQ : DéfinitionLinq = LanguageINtegratedQueryExemplesDLinq = Database + LinqAppelé maintenant Linq to DataXlinq = XML + LinqAppelé maintenant Linq to XML
  • 78. LINQ : ConceptsLinq = innovation de VS2008 et .NET 3.5Change radicalement le travail de donnéesAvantagesSimplifie l’écriture des requêtesUnifie la syntaxe de requêtes pour tout type de source de donnéesRenforce la connection entre les données relationnelles et le monde de l’OOAccélère les développements Gestion des erreurs à la compilationIntellisense et debugging
  • 79. LINQ : Fondations C# v3.0 – VB v9.0Query expressionsvar contacts = from c in customers where c.State == "WA" select new { c.Name, c.Phone };Expression treesLocal variable type inferenceAutomatic propertiesLambda expressionsvar contacts = customers .Where(c => c.State == "WA") .Select(c => new { c.Name, c.Phone });Partial methodsExtension methodsObject initializersAnonymous types
  • 80. LINQ : ArchitectureOthers…VBC#.NET Language Integrated Query (LINQ)Sources de données LINQLinqsur des sources ADO.NETLINQ To XMLLINQ To EntitiesLINQ To SQLLINQ To DatasetsLINQ To ObjectsProvider<book> <title/> <author/> <price/></book>XMLRelationnelObjets
  • 81. Une syntaxe unique pour plusieurs sources de données
  • 82. LINQ : 3 parties de toute requêteTouterequête LINQ consiste en 3 actions essentielles :Obtention de la source de données(xml, db, Objects)Création de la requêteExécution de la requête
  • 83. LINQ : FrameworkL’architecture à la base de Linq est constituée de deux partiesLINQ Language Extensions Un langage de programmation implémentant les extensions de langage LINQC# et VB implémentés au sein de VS2008LINQ Providers Provider LINQ implémentant les Standard QueryOperator méthodes pour chaque source de données spéficique.
  • 84. LINQ : Requête de baseIEnumerable<Customer> customerQuery = from cust in customers //...Exemple : List<int> numberList = new List<int> { 1, 2, 3, 4 };var query = from i in numberList where i < 4 select i;
  • 85. Query Expressions   var locals = from c in customersWherec.ZipCode==91822 select (new {FullName=c.FirstName + “ “ + c.LastName, HomeAdresse=c.Address});var locals = customers .Where(c => c.ZipCode == 91822) .Select(c => new { FullName = c.FirstName + “ “ + c.LastName, HomeAddress = c.Address });
  • 86. Linq or not : Différence ?C#2List<City> returnCities = new List<City>();Foreach (city c in cities){If (c.Name==« London »)returnCities.Add(c);}C#3var query= from c in citiesWhere c. Name==« London »Select c;
  • 87. Exprimer la sémantique d’une requête et non son implémentation
  • 88. LINQ : Projections - SELECTUtilisation du Keyword “Select”Nécessité de modifier, transformer les donnéesretournées par unerequête LINQLINQ permet des scénariosavancés de mise en forme de données = “Projections”Exploitation des type anonymesproposés par le compilateur
  • 89. LINQ : Projections + Types Anonymes List<City> cities = CityUtilityHelper.GetCities();var places = from city in cities where city.DistanceFromSeattle > 1000select new { City = city.Name, Country = city.Country,DistanceInKm = city.DistanceFromSeattle * 1.61 }; GridView1.DataSource = places; GridView1.DataBind();Type anonymeutilisé pour forger un type de retour personnalisé ! Application d’une conversion Miles/Kms
  • 90. LINQ : Query OperatorsC# 3.0VB 9.0from .. in ..where ..select .. [into ..]group .. by .. [into ..]orderby .. [descending]join .. in .. on .. equals ..let .. = ..From .. [As ..] In ..Where ..Select .. [,..]*Group .. By .. Into ..Group Join .. [As ..] In .. On ..Equals .. [...] Into ..Order By ... [Descending]Join .. In .. On ..Equals .. [...]Let .. = ...Others:Skip, Skip While, Take, Take WhileAggregates: All, Any, Average, [Long]Count, Max, Min, SumLes opérateurs sont implémentés via des méthodes d’extensions
  • 92. ConclusionsVue d’ensemble des évolutions du .NETFx et de son IDENouveautés de C# v3.0 / VB 9.0
  • 93. Des nouveautés à LINQ : un pas ?
  • 94. LINQ : .NET Language-IntegratedQuery… Vos Questions ?

Notes de l'éditeur

  • #2: • VB9• C#3• IDE enhancements for .NET Fx 3.0• .NET Fx 3.5• Impact of Windows Server 2008 for developers
  • #6: The main points are that the CLR engine is the same version (so no need to retest your apps) and that the headline feature is the language enhancements (C#3 & VB9 compilers) and LINQ.
  • #7: The main points are that the CLR engine is the same version (so no need to retest your apps) and that the headline feature is the language enhancements (C#3 & VB9 compilers) and LINQ.
  • #8: Time: 4 minDiscussion Points:How do the new 3.5 SP1 technologies relate to previous versions of the framework?First, let’s talk about how these new SP1 enhancements relate to the 3.5, 3.0, and 2.0 versions of the framework.The .NET Framework 3.5 SP1 will add these technologies on top of the framework 3.5 that just shipped in November.In addition, the current plan of record is that there will be updated service packs for both the 3.0 assemblies and the 2.0 framework and CLRSo to be clear, the .NET Framework 3.5 SP1 will depend on the .NET Framework 3.5, 3.0 with SP2, and 2.0 with SP2 to be installed on a users machine.
  • #13: C# - started as “the (first) language for CLR”; emphasize the pragmatic approach (cf. Anders Hejlsberg) = be explicit about language features like properties, events, etc.  developer confidence2.0 = generics wave (impact on CLR) + additional useful things (that do require generics on their own + that are useful on their own)3.0 = LINQ + making the language more concise, more productive, more powerful, ...
  • #14: LINQ: tell the story of Reflex 2.0, Dbase III+, ... where data and code were close together  structured + distributed programming changed this = layered approach  result: data and code on two islands with a huge gap between the two  need for O/R mapping tools etcWith LINQ: data becomes a first-class citizen of the languageReduce “language noise” (e.g. tiresome repetitive code etc)API independent  you can reimplement stuff on your own, the language doesn’t care about it (e.g. extension methods on Ienumerable<T>, don’t mention the word yet)Backward compat: refer to MSR paper on formal proof of the possibility for translation of every C# 3.0 program to an equivalent C# 2.0 program (semantically)
  • #15: Build up the slide and introduce “syntactical sugar”. Story telling approach referring back to the gap between data and code and the LINQ solution using Language Integrated queries  requires glue: functional style programming concepts, introduction of concepts from the relational world (e.g. projection clauses require anonymous types) and language simplification (e.g. object initializers).Use the words:-Different compilation stages (front-end query syntax is translated into “pure” C# into ..., e.g. resolution of query expressions to chains of method calls)-Method call chain (can still be instance methods or extension methods)
  • #16: VB = longer history (up to 9.0)Refer to huge transition from 6.0 to .NET which implied the creation of a runtime library for bw compat: play the rules of the CLS (OO for example) and remain consistent with VB pre-.NETVB 8.0 = GenericsVB 9.0 = LINQ + XML (difference with C#)
  • #17: Similar story as in C# 3.0 except for XML integration; emphasize that language evolutuon doesn’t mean that languages have to go hand in hand on any field.
  • #18: Similar story as with C# 3.0 but abbrev’d.
  • #20: http://msdn2.microsoft.com/fr-fr/library/7cz8t42e(VS.80).aspx
  • #22: Réf : http://www.dotnetguru.org/articles/dossiers/generics/CS2_Generics_FR2.htm
  • #24: Réf : http://www.dotnetguru.org/articles/dossiers/anonymescsharp2/CS2_AnonymousMethod_FR.htmThe delegate keyword is used to declare a reference type that can be used to encapsulate a named or an anonymous method. Delegates are similar to function pointers in C++; however, delegates are type-safe and secure. For applications of delegates, see Delegates and Generic Delegates.
  • #25: http://msdn2.microsoft.com/en-us/library/sx2bwtw7(VS.80).aspx
  • #26: Traitement continuPossibilité de gérer des listes infinies comme dans les langages fonctionnels
  • #28: http://msdn2.microsoft.com/fr-fr/library/79b3xss3(VS.80).aspx
  • #30: http://msdn2.microsoft.com/en-us/library/bb383815(VS.90).aspx
  • #31: When used with local variables, the var keyword instructs the compiler to infer the type of the variable or the array elements from the expression on the right side of the initialization statement.Indispensable pour les types anonymeshttp://msdn2.microsoft.com/fr-fr/library/bb384061(VS.90).aspx
  • #32: http://msdn2.microsoft.com/fr-fr/library/bb384062(VS.90).aspx
  • #33: Collection initializers provide a way to specify one or more object intializers when initializing any collection class that implements IEnumerable. By using a collection initializer you do not have to specify multiple calls to the Add method of the class in your source code; the compiler adds the calls2ème exemple :The following collection initializer uses object initializers to initialize objects of the Test class defined in an earlier example. Note that the individual object initializers are enclosed in braces and separated by commas.