Visual Studio 2008<br />Nouveautés de l’IDE, C#3, VB9, … LINQ et perspectives<br />
A propos<br />… de votre speaker : Gregory Renard [akaRedo]<br /><ul><li> CTO Wygwam, www.wygwam.com
 Bureau d’étude et d’aide à l’acquisition des technologies
 Microsoft RegionalDirector / MVP
 Auteur (2006 – 2007)
 Livres : .NET 2.0 – VB 2005 – VS2005
 Articles Techniques presse francophone
 Communautaire
 Blog : http://blogs.developpeur.org/redo
 Sites : Codes-Sources, ASP-PHP.NET, TechHeadBrothers, MSDN, …
 Speaker Microsoft .NET > 5 ans
 Events MSDN Belgique – Luxembourg
 Events MSDN France
TechDays France
Wygday
 E-mail : gregory@wygwam.com</li></li></ul><li>Roadmap<br />Vue d’ensemble des évolutions du .NETFx et de son IDE<br /><ul...
 Nouveautés des langages
C# v3.0
VB v9.0
 LINQ
 Nouveautés de l’IDE VS2008</li></li></ul><li>Rappel<br />Vue d’ensemble des évolutions du .NETFx et de son IDE<br />
De 2002 à 2008<br />Source : http://www.danielmoth.com/Blog/2007/06/visual-studio-2008-stack.html<br />
De 2002 à 2008<br />
Nouveautés des langages<br />Vue d’ensemble des évolutions du .NETFx et de son IDE<br /><ul><li> Vue d’ensemble des nouvea...
C# v3.0
VB v9.0</li></li></ul><li>C#, son Historique !<br />
C# 3.0, ses objectifs de conception !<br />Intégration d’objets, des données relationnelles et du XML<br />LINQ<br />Enric...
C# 3.0, ses Innovations !<br />Query expressions<br />var contacts =<br />    from c in customers<br />    where c.State =...
VB, son Historique !<br />
VB 9.0, ses objectifs de conception !<br />Intégration d’objets, des données relationnelles et du XML<br />LINQ + Intégrat...
VB 9.0, ses Innovations !<br />Query expressions<br />Dim contacts =<br />From c In customers<br />Where c.State= &quot;WA...
Nouveautés des langages<br />Vue d’ensemble des évolutions du .NETFx et de son IDE<br /><ul><li> Parcours des nouveautés
 Rappel C# v2.0 – VB v8.0
 C# v3.0
 VB v9.0</li></li></ul><li>Rappel C# v2.0 – VB v8.0<br />http://msdn2.microsoft.com/en-us/library/7cz8t42e(VS.80).aspx<br />
Types Generiques (C# - VB)<br />Suppression du boxing/unboxing<br />Suppression du Casting implicite<br />Gestion de l’err...
Classes partielles (C# - VB)<br />Définition d’une classe  sur plusieurs fichiers<br />Utilité dans la génération de code<...
Méthodes anonymes (C#)<br />Manière de passer un bloc de code comme paramètre de délégué.<br />Réduction du codage dans l’...
Méthodes anonymes (C#)<br />public delegate T Func&lt;T, A&gt; (A a)<br />Délégué générique qui représente une fonction à ...
Itérateurs (C#)<br />Méthode, accesseur ou opérateur get permettant de prendre en charge l&apos;itération foreach dans une...
Qualificateur global de Namespace (C#)<br />« :: »<br />Résout le membre être caché par une autre entité du même nom. <br />
Classes Statiques (C#)<br />Accès sans création d’instances<br />Chargé automatiquement par le CLR<br />
Types Nullables (C#)<br />Permet d’avoir des types valeurs nullables<br />Pratique pour les données nullables provenant de...
C# v3.0<br />http://msdn2.microsoft.com/en-us/library/bb383815(VS.90).aspx<br />
Types implicites<br />« Var »<br />Déclaration de variable ou Array sans spécifier de type<br />Déclaration fortement typé...
Initialisation d’objets<br />Déclaration avec unesyntaxesimplifiée.<br />Initialisationd’objettypé<br />	Person p = new Pe...
Initialisation de collections<br />Uniquement pour les collection de classes implementant “Ienumerable”<br />	List&lt;int&...
Propriétés automatiques<br />Déclaration avec unesyntaxesimplifiée.<br />Attributs non permis (utiliseralors la méthoderég...
Types anonymes<br />Types automatiquement générés à la compilationvar v = new { Amount = 108, Message = &quot;Hello&quot; ...
Méthodes d’extension <br />Ajout “Virtuel” d’une méthode à un type<br />Méthode Static : premier paramètre “this”<br />Éte...
Expressions Lambda<br />Ecriture inline de méthodes<br />Lambda opérateur « =&gt; »<br />Simplifications d&apos;écriture d...
Expressions Lambda<br />Exemplesd’expressions lambda<br />	x =&gt; x + 1			// Implicitly typed, expression body<br />	x =&...
Expressions Lambda<br />Inférence de type dans une Lambda<br />customers.Where(c =&gt; c.City == &quot;London&quot;);<br /...
Arbres d’expression<br />usingSystem.Linq.Expressions;Expression&lt;Func&lt;int, bool&gt;&gt; exprTree = num =&gt; num &lt...
Expressions<br />Une expression représente l’arbre d’objets qui représente l’expression passée en argument<br />
Méthodes Partielles<br />Les types partiels peuvent maintenant contenir des méthodes partielles<br />		partial class Custo...
VB v9.0<br />http://msdn2.microsoft.com/en-us/library/y17w47af(VS.90).aspx<br />
Types nullables<br />Valid for all value types<br />Dim a As Integer?‘Will be Nothing<br />a = 123<br />a = Nothing‘Boolea...
Types implicites<br />« Dim »<br />Déclaration de variable ou Array sans spécifier de type<br />Déclaration fortement typé...
Initialisation d’objets<br />Déclaration avec unesyntaxesimplifiée<br />Mot clé “With”<br />Initialisationd’objettypé<br /...
Types anonymes<br />Types automatiquement générés à la compilation Dim product1 = New With {.Name = &quot;paperclips&quot;...
Types anonymes : Key Properties<br />Comparaison de deux types anonymes (Key)<br />Que les « Key »  sont comparées<br />Le...
RelaxedDelegates<br />Vraie relaxation : les paramètres ne sont pas employés, vous pouvez ne pas les utiliser.<br />		Dim ...
Méthodes d’extension <br />Ajout “Virtuel” d’une méthode à un type<br />Extension attribute &lt;Extension()&gt; de l’espac...
Expressions Lambda<br />Ecriture inline de méthodes<br />		Dim fnums = numbers.Where(Function(n) n &lt; 5)<br />Lambda opé...
Meilleur support XML<br />Modèle hiérarchique de programmation simplifié<br />Imports &lt;xmlns:ns=“http://myNamespace/sch...
Meilleur support xml<br />LINQ query<br />DimcountriesWithCapital = _&lt;Countries&gt;&lt;%=From country In Countries, cit...
Prochain SlideShare
Chargement dans…5
×

Visual Studio 2008 Overview

1 363 vues

Publié le

Publié dans : Technologie, Voyages, Business
  • Soyez le premier à commenter

Visual Studio 2008 Overview

  1. 1. Visual Studio 2008<br />Nouveautés de l’IDE, C#3, VB9, … LINQ et perspectives<br />
  2. 2. A propos<br />… de votre speaker : Gregory Renard [akaRedo]<br /><ul><li> CTO Wygwam, www.wygwam.com
  3. 3. Bureau d’étude et d’aide à l’acquisition des technologies
  4. 4. Microsoft RegionalDirector / MVP
  5. 5. Auteur (2006 – 2007)
  6. 6. Livres : .NET 2.0 – VB 2005 – VS2005
  7. 7. Articles Techniques presse francophone
  8. 8. Communautaire
  9. 9. Blog : http://blogs.developpeur.org/redo
  10. 10. Sites : Codes-Sources, ASP-PHP.NET, TechHeadBrothers, MSDN, …
  11. 11. Speaker Microsoft .NET > 5 ans
  12. 12. Events MSDN Belgique – Luxembourg
  13. 13. Events MSDN France
  14. 14. TechDays France
  15. 15. Wygday
  16. 16. E-mail : gregory@wygwam.com</li></li></ul><li>Roadmap<br />Vue d’ensemble des évolutions du .NETFx et de son IDE<br /><ul><li> Rappel
  17. 17. Nouveautés des langages
  18. 18. C# v3.0
  19. 19. VB v9.0
  20. 20. LINQ
  21. 21. Nouveautés de l’IDE VS2008</li></li></ul><li>Rappel<br />Vue d’ensemble des évolutions du .NETFx et de son IDE<br />
  22. 22. De 2002 à 2008<br />Source : http://www.danielmoth.com/Blog/2007/06/visual-studio-2008-stack.html<br />
  23. 23. De 2002 à 2008<br />
  24. 24. Nouveautés des langages<br />Vue d’ensemble des évolutions du .NETFx et de son IDE<br /><ul><li> Vue d’ensemble des nouveautés
  25. 25. C# v3.0
  26. 26. VB v9.0</li></li></ul><li>C#, son Historique !<br />
  27. 27. C# 3.0, ses objectifs de conception !<br />Intégration d’objets, des données relationnelles et du XML<br />LINQ<br />Enrichissement du langage (C# v1.0, v2.0)<br />Basésur la .NET CLR 2.0 <br />Ajout de nouvellesfonctionnalités<br />Lambda expressions<br />Détachement du langage des APIs spécifiques<br />100% compatible avec les versions précédentes<br />C# 3.0 peutêtrecomplètementtraduit en C# 2.0<br />
  28. 28. C# 3.0, ses Innovations !<br />Query expressions<br />var contacts =<br /> from c in customers<br /> where c.State == &quot;WA&quot;<br /> select new { c.Name, c.Phone };<br />Expression trees<br />Local variable type inference<br />Automatic properties<br />Lambda expressions<br />var contacts =<br /> customers<br /> .Where(c =&gt; c.State == &quot;WA&quot;)<br /> .Select(c =&gt; new { c.Name, c.Phone });<br />Partial methods<br />Extension methods<br />Object initializers<br />Anonymous types<br />
  29. 29. VB, son Historique !<br />
  30. 30. VB 9.0, ses objectifs de conception !<br />Intégration d’objets, des données relationnelles et du XML<br />LINQ + Intégration XML<br />Amelioration du langage<br />Amélioration de la syntaxe des tâches typiques<br />Ajout de nouvellesfonctionnalités<br />Lambda expressions<br />
  31. 31. VB 9.0, ses Innovations !<br />Query expressions<br />Dim contacts =<br />From c In customers<br />Where c.State= &quot;WA&quot;<br />Select New With { Name = c.Name, _ Phone = c.Phone }<br />Expression trees<br />Implicitly typed local variable<br />Deep XML support<br />Lambda expressions<br />Dim contacts =<br />customers _<br /> .Where(Function(c) c.State = &quot;WA&quot;) _<br /> .Select(Function(c) New With { Name = c.Name, _ Phone = c.Phone })<br />Partial methods<br />Extension methods<br />Anonymous types<br />Object initializers<br />
  32. 32. Nouveautés des langages<br />Vue d’ensemble des évolutions du .NETFx et de son IDE<br /><ul><li> Parcours des nouveautés
  33. 33. Rappel C# v2.0 – VB v8.0
  34. 34. C# v3.0
  35. 35. VB v9.0</li></li></ul><li>Rappel C# v2.0 – VB v8.0<br />http://msdn2.microsoft.com/en-us/library/7cz8t42e(VS.80).aspx<br />
  36. 36. Types Generiques (C# - VB)<br />Suppression du boxing/unboxing<br />Suppression du Casting implicite<br />Gestion de l’erreur lors de la compilation<br />Meilleure lisibilité du code<br />Meilleures performances<br />
  37. 37. Classes partielles (C# - VB)<br />Définition d’une classe sur plusieurs fichiers<br />Utilité dans la génération de code<br />Exploité par les Winforms et Webforms<br />
  38. 38. Méthodes anonymes (C#)<br />Manière de passer un bloc de code comme paramètre de délégué.<br />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<br />
  39. 39. Méthodes anonymes (C#)<br />public delegate T Func&lt;T, A&gt; (A a)<br />Délégué générique qui représente une fonction à un paramètre<br />
  40. 40. Itérateurs (C#)<br />Méthode, accesseur ou opérateur get permettant de prendre en charge l&apos;itération foreach dans une classe ou une struct sans implémenter l&apos;interface IEnumerable dans son intégralité<br />Exécution différée<br />Mot clé yield return<br />
  41. 41. Qualificateur global de Namespace (C#)<br />« :: »<br />Résout le membre être caché par une autre entité du même nom. <br />
  42. 42. Classes Statiques (C#)<br />Accès sans création d’instances<br />Chargé automatiquement par le CLR<br />
  43. 43. Types Nullables (C#)<br />Permet d’avoir des types valeurs nullables<br />Pratique pour les données nullables provenant de bases de données<br />
  44. 44. C# v3.0<br />http://msdn2.microsoft.com/en-us/library/bb383815(VS.90).aspx<br />
  45. 45. Types implicites<br />« Var »<br />Déclaration de variable ou Array sans spécifier de type<br />Déclaration fortement typée<br />Doit être directement initialisée<br />Variables locales uniquement<br />
  46. 46. Initialisation d’objets<br />Déclaration avec unesyntaxesimplifiée.<br />Initialisationd’objettypé<br /> Person p = new Person {Name = &quot;Chris Smith&quot;, Age = 31}; <br />Initialisationd’objet avec type anonyme<br />varproductInfos = from p in products select new {p.ProductName, p.UnitPrice};<br />foreach(var p in productInfos){...}<br />Initialisation d’objet avec un type nullable : compile time error !<br />
  47. 47. Initialisation de collections<br />Uniquement pour les collection de classes implementant “Ienumerable”<br /> List&lt;int&gt; digits = new List&lt;int&gt; { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };<br /> List&lt;Test&gt; list = new List&lt;Test&gt; <br /> { <br /> new Test{ num = 1, s = &quot;Hello&quot;}, <br /> new Test{ num = 2, s = &quot;World&quot;}, <br /> new Test{ num = 3, s = &quot;From C#&quot;} <br /> };<br />
  48. 48. Propriétés automatiques<br />Déclaration avec unesyntaxesimplifiée.<br />Attributs non permis (utiliseralors la méthoderégulière) <br />
  49. 49. Types anonymes<br />Types automatiquement générés à la compilationvar v = new { Amount = 108, Message = &quot;Hello&quot; };<br />Non disponible dans le code source<br />Intellisence disponible<br />Typiquementutilisédans la clause select des query expression<br />Repose surl’initialisationd’objet et collections<br /> var query = fromprod in Products select new { prod.Color, prod.Price}; foreach(var v in query) { Console.WriteLine(&quot;Color={0}, Price={1}&quot;, v.Color, v.Price); }<br />
  50. 50. Méthodes d’extension <br />Ajout “Virtuel” d’une méthode à un type<br />Méthode Static : premier paramètre “this”<br />Étend, ne modifie pas le type, override <br />Définition du scope par “using namespaces”<br />
  51. 51. Expressions Lambda<br />Ecriture inline de méthodes<br />Lambda opérateur « =&gt; »<br />Simplifications d&apos;écriture des entêtes d&apos;une méthode anonyme<br />delegateint D1(int i); D1 myDelegate1 = x =&gt; x + 1; int j = myDelegate1(5); //j = 6<br />Permet d’écrire une fonction dans une expression et de récupérer un pointeur vers la fonction<br />Possibilité de récupérer un arbre d’expression<br />
  52. 52. Expressions Lambda<br />Exemplesd’expressions lambda<br /> x =&gt; x + 1 // Implicitly typed, expression body<br /> x =&gt; { return x + 1; } // Implicitly typed, statement body<br /> (int x) =&gt; x + 1 // Explicitly typed, expression body<br /> (int x) =&gt; { return x + 1; } // Explicitly typed, statement body<br /> (x, y) =&gt; x * y // Multiple parameters<br /> () =&gt; Console.WriteLine() // No parameters<br />
  53. 53. Expressions Lambda<br />Inférence de type dans une Lambda<br />customers.Where(c =&gt; c.City == &quot;London&quot;);<br />Opérateurs de vérification<br />Func&lt;int, bool&gt; myFunc = x =&gt; x == 5; <br />bool result = myFunc(4); // returns false of course<br />int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; intoddNumbers = numbers.Count(n =&gt; n % 2 == 1);<br />Ne pas confondre avec l’opérateur “&gt;=“<br />varfirstSmallNumbers = numbers.TakeWhile((n, index) =&gt; n &gt;= index);<br />
  54. 54. Arbres d’expression<br />usingSystem.Linq.Expressions;Expression&lt;Func&lt;int, bool&gt;&gt; exprTree = num =&gt; num &lt; 5; <br />Les expressions lambda peuvent être traduite <br />Code IL<br />Arbre d’expressions<br />Peuvent être parsés au Runtime<br />Utilisés au sein des LinqQuery Provider (Linq to SQL)<br />Func&lt;int,int&gt; square = i =&gt; i * i;int four = square(2);Expression&lt;Func&lt;int,int&gt;&gt; squareEx = i =&gt; i * i;<br />λ<br />*<br />i<br />i<br />i<br />
  55. 55. Expressions<br />Une expression représente l’arbre d’objets qui représente l’expression passée en argument<br />
  56. 56. Méthodes Partielles<br />Les types partiels peuvent maintenant contenir des méthodes partielles<br /> partial class Customer { partial void OnCreated() {Console.WriteLine(“Welcome new customer”); } }<br />
  57. 57. VB v9.0<br />http://msdn2.microsoft.com/en-us/library/y17w47af(VS.90).aspx<br />
  58. 58. Types nullables<br />Valid for all value types<br />Dim a As Integer?‘Will be Nothing<br />a = 123<br />a = Nothing‘Boolean HasValue property<br />Dim hasValue = a.HasValue‘Get the value via Value property or directly<br />Dim value1 As Integer = a.Value<br />Dim value2 As Integer = a<br />Will throw exception if equal to Nothing<br />
  59. 59. Types implicites<br />« Dim »<br />Déclaration de variable ou Array sans spécifier de type<br />Déclaration fortement typée<br />Doit être directement initialisée<br />Variables locales uniquement<br />
  60. 60. Initialisation d’objets<br />Déclaration avec unesyntaxesimplifiée<br />Mot clé “With”<br />Initialisationd’objettypé<br /> Dim namedCust = New Customer With {.Name = “xxx&quot;}<br />Initialisationd’objet avec type anonyme<br /> Dim anonymousCust = New With {.Name = “xxx&quot;}<br />Initialisation d’objet avec un type nullable : compile time error !<br />
  61. 61. Types anonymes<br />Types automatiquement générés à la compilation Dim product1 = New With {.Name = &quot;paperclips&quot;, .Price = 1.29}<br />Non disponible dans le code source<br />Intellisence disponible<br />Typiquementutilisédans la clause select des query expression<br />Repose surl’initialisationd’objet<br />
  62. 62. Types anonymes : Key Properties<br />Comparaison de deux types anonymes (Key)<br />Que les « Key » sont comparées<br />Les valeurs des « Key » sont :<br />Read-Only<br />Ne peuvent être changées<br />Seule la valeur d&apos;une propriété « Key » est incluse dans l&apos;algorithme compilateur produisant le code du type anonyme.<br />
  63. 63. RelaxedDelegates<br />Vraie relaxation : les paramètres ne sont pas employés, vous pouvez ne pas les utiliser.<br /> Dim WithEventsbtn As New Button()<br />SubBOnClick(ByValsender As Object, ByVal e As EventArgs) Handlesbtn.Click<br />MessageBox.Show(&quot;Hello World from&quot; & btn.Text)<br /> End Sub<br />SubRelaxedOnClick() Handlesbtn.Click<br />MessageBox.Show(&quot;Hello World from&quot; & btn.Text)<br /> End Sub<br />
  64. 64. Méthodes d’extension <br />Ajout “Virtuel” d’une méthode à un type<br />Extension attribute &lt;Extension()&gt; de l’espace de nom System.Runtime.CompilerServices<br />Étend, ne modifie pas le type, override <br />Définition du scope par “imports namespaces”<br />
  65. 65. Expressions Lambda<br />Ecriture inline de méthodes<br /> Dim fnums = numbers.Where(Function(n) n &lt; 5)<br />Lambda opérateur « Function »<br />Simplifications d&apos;écriture des entêtes d&apos;une méthode anonyme<br />Permet d’écrire une fonction dans une expression et de récupérer un pointeur vers la fonction<br />Possibilité de récupérer un arbre d’expression<br />
  66. 66. Meilleur support XML<br />Modèle hiérarchique de programmation simplifié<br />Imports &lt;xmlns:ns=“http://myNamespace/schema”&gt;Dim books = &lt;books&gt; &lt;book Title=“Welcome to VB 9.0”&gt; &lt;author Name=“Bart”&gt; &lt;origin&gt;Belgium&lt;/origin&gt; &lt;/author&gt; &lt;/book&gt; &lt;/books&gt;For Each book in books.&lt;book&gt;<br /> Console.WriteLine(book.@Title); Console.WriteLine(book.&lt;author&gt;.@Name); Console.WriteLine(book...&lt;origin&gt;);<br />Next<br />Inline XML<br />Child axis .&lt; (for iteration)<br />Attribute axis (.@)<br />Descendant axis …search in all descendants<br />
  67. 67. Meilleur support xml<br />LINQ query<br />DimcountriesWithCapital = _&lt;Countries&gt;&lt;%=From country In Countries, city In Capitals _ Wherecountry.Name = city.Country _Select _&lt;CountryName=&lt;%=country.Name%&gt;Density=&lt;%=country.Population / country.Area%&gt;&gt;&lt;Capital&gt;&lt;Name&gt;&lt;%=city.Name%&gt;&lt;/Name&gt;&lt;Longitude&gt;&lt;%=city.Longitude%&gt;&lt;/Longitude&gt;&lt;Latitude&gt;&lt;%=city.Latitude%&gt;&lt;/Latitude&gt;&lt;/Capital&gt;&lt;/Country&gt; _%&gt;&lt;/Countries&gt;<br />ASP-alike embedded expressions<br />
  68. 68. Autres amélioration VB v 9.0<br />Friend assemblies<br />InternalsVisibleTo attribute recognized<br />Runtime agility<br />Compile without Microsoft.VisualBasic.dll<br />Need originates from CF and Silverlight<br />New /vbruntime switch<br />Improved generic type inferencing<br />Calling Object members on interfaces<br />
  69. 69. LINQ<br />.NET Language-IntegratedQuery<br />http://msdn2.microsoft.com/fr-fr/netframework/aa904594.aspx<br />
  70. 70. LINQ : Définition<br />Linq = LanguageINtegratedQuery<br />Exemples<br />DLinq = Database + Linq<br />Appelé maintenant Linq to Data<br />Xlinq = XML + Linq<br />Appelé maintenant Linq to XML<br />
  71. 71. LINQ : Concepts<br />Linq = <br />innovation de VS2008 et .NET 3.5<br />Change radicalement le travail de données<br />Avantages<br />Simplifie l’écriture des requêtes<br />Unifie la syntaxe de requêtes pour tout type de source de données<br />Renforce la connection entre les données relationnelles et le monde de l’OO<br />Accélère les développements <br />Gestion des erreurs à la compilation<br />Intellisense et debugging<br />
  72. 72. LINQ : Fondations C# v3.0 – VB v9.0<br />Query expressions<br />var contacts =<br /> from c in customers<br /> where c.State == &quot;WA&quot;<br /> select new { c.Name, c.Phone };<br />Expression trees<br />Local variable type inference<br />Automatic properties<br />Lambda expressions<br />var contacts =<br /> customers<br /> .Where(c =&gt; c.State == &quot;WA&quot;)<br /> .Select(c =&gt; new { c.Name, c.Phone });<br />Partial methods<br />Extension methods<br />Object initializers<br />Anonymous types<br />
  73. 73. LINQ : Architecture<br />Others…<br />VB<br />C#<br />.NET Language Integrated Query (LINQ)<br />Sources de données LINQ<br />Linqsur des sources ADO.NET<br />LINQ <br />To XML<br />LINQ <br />To Entities<br />LINQ <br />To SQL<br />LINQ <br />To Datasets<br />LINQ <br />To Objects<br />Provider<br />&lt;book&gt;<br /> &lt;title/&gt;<br /> &lt;author/&gt;<br /> &lt;price/&gt;<br />&lt;/book&gt;<br />XML<br />Relationnel<br />Objets<br />
  74. 74. Une syntaxe unique pour plusieurs sources de données<br />
  75. 75. LINQ : 3 parties de toute requête<br />Touterequête LINQ consiste en actions essentielles :<br />Obtention de la source de données(xml, db, Objects)<br />Création de la requête<br />Exécution de la requête<br />
  76. 76. LINQ : Framework<br />L’architecture à la base de Linq est constituée de deux parties<br />LINQ Language Extensions Un langage de programmation implémentant les extensions de langage LINQ<br />C# et VB implémentés au sein de VS2008<br />LINQ Providers Provider LINQ implémentant les Standard QueryOperator méthodes pour chaque source de données spéficique.<br />
  77. 77. LINQ : Requête de base<br />IEnumerable&lt;Customer&gt; customerQuery = from cust in customers //...<br />Exemple : <br />List&lt;int&gt; numberList = new List&lt;int&gt; { 1, 2, 3, 4 };var query = from i in numberList<br /> where i &lt; 4<br /> select i;<br />
  78. 78. Query Expressions<br />   var locals = from c in customers<br />Wherec.ZipCode==91822<br /> select (new {FullName=c.FirstName + “ “ + c.LastName, HomeAdresse=c.Address});<br /><br />var locals = customers .Where(c =&gt; c.ZipCode == 91822) .Select(c =&gt; new { FullName = c.FirstName + “ “ + c.LastName, HomeAddress = c.Address }); <br />
  79. 79. Linq or not : Différence ?<br />C#2<br />List&lt;City&gt; returnCities = new List&lt;City&gt;();<br />Foreach (city c in cities)<br />{<br />If (c.Name==« London »)<br />returnCities.Add(c);<br />}<br />C#3<br />var query= from c in cities<br />Where c. Name==« London »<br />Select c;<br />
  80. 80. Exprimer la sémantique d’une requête et non son implémentation<br />
  81. 81. LINQ : Projections - SELECT<br />Utilisation du Keyword “Select”<br />Nécessité de modifier, transformer les donnéesretournées par unerequête LINQ<br />LINQ permet des scénariosavancés de mise en forme de données = “Projections”<br />Exploitation des type anonymesproposés par le compilateur<br />
  82. 82. LINQ : Projections + Types Anonymes<br /> List&lt;City&gt; cities = CityUtilityHelper.GetCities();<br />var places = from city in cities<br /> where city.DistanceFromSeattle &gt; 1000<br />select new {<br /> City = city.Name,<br /> Country = city.Country,<br />DistanceInKm = city.DistanceFromSeattle * 1.61<br /> };<br /> GridView1.DataSource = places;<br /> GridView1.DataBind();<br />Type anonymeutilisé pour forger un type de retour personnalisé ! Application d’une conversion Miles/Kms<br />
  83. 83. LINQ : Query Operators<br />C# 3.0<br />VB 9.0<br />from .. in ..<br />where ..<br />select .. [into ..]<br />group .. by .. [into ..]<br />orderby .. [descending]<br />join .. in .. on .. equals ..<br />let .. = ..<br />From .. [As ..] In ..<br />Where ..<br />Select .. [,..]*<br />Group .. By .. Into ..<br />Group Join .. [As ..] In .. On ..Equals .. [...] Into ..<br />Order By ... [Descending]<br />Join .. In .. On ..Equals .. [...]<br />Let .. = ...<br />Others:<br />Skip, Skip While, Take, Take While<br />Aggregates: All, Any, Average, [Long]Count, Max, Min, Sum<br />Les opérateurs sont implémentés via des méthodes d’extensions<br />
  84. 84. Nouveautés de l’IDE VS2008<br />Vue d’ensemble des évolutions du .NETFx et de son IDE<br /><ul><li> 3 axes majeurs
  85. 85. Accroîtrevotreproductivité
  86. 86. Développement .NET 3.5 - Vista
  87. 87. Travail collaboratif</li></li></ul><li>Quoi de neuf ???<br />Quelquesexemples :<br />Framework Targeting (2.0, 3.0, 3.5)<br />Tous types de projets “Out of the box” !<br />Intégration des designers WPF, WCF, WF<br />Intégration de VSTO<br />Intégrationd’ASP.NETAJAX<br />Amélioration de l’éditeur HTML<br />Split source/design view<br />JavaScript IntelliSense et debugging<br />CSS manager et debugger<br />Améliorationsesthétiques et d’usage<br />
  88. 88. Amélioration du Debugger<br />Remote debugging support pour Windows Vista<br />Amélioration support du debugging des applications multithread<br />Debugging support pour LINQ<br />Debugging support for WCF<br />Meilleur support des script de debugging<br />
  89. 89. Conclusions<br />Vue d’ensemble des évolutions du .NETFx et de son IDE<br /><ul><li> C# v3.0
  90. 90. VB 9.0
  91. 91. LINQ
  92. 92. VS2008</li></ul>… Vos Questions ?<br />

×