Your SlideShare is downloading. ×
  • Like
  • Save
Vs2008 Linq
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Vs2008 Linq

  • 1,160 views
Published

 

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • 34
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
1,160
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
1
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • • VB9• C#3• IDE enhancements for .NET Fx 3.0• .NET Fx 3.5• Impact of Windows Server 2008 for developers
  • 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.
  • 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.
  • 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.
  • 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, ...
  • 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)
  • 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)
  • 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#)
  • 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.
  • Similar story as with C# 3.0 but abbrev’d.
  • http://msdn2.microsoft.com/fr-fr/library/7cz8t42e(VS.80).aspx
  • Réf : http://www.dotnetguru.org/articles/dossiers/generics/CS2_Generics_FR2.htm
  • 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.
  • http://msdn2.microsoft.com/en-us/library/sx2bwtw7(VS.80).aspx
  • Traitement continuPossibilité de gérer des listes infinies comme dans les langages fonctionnels
  • http://msdn2.microsoft.com/fr-fr/library/79b3xss3(VS.80).aspx
  • http://msdn2.microsoft.com/en-us/library/bb383815(VS.90).aspx
  • 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
  • http://msdn2.microsoft.com/fr-fr/library/bb384062(VS.90).aspx
  • 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.

Transcript

  • 1. LINQ
    Des 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
    • 4. Microsoft RegionalDirector / MVP
    • 5. Auteur (2006 – 2007)
    • 6. Livres/Livres Blancs : .NET 2.0 /3.0/3.5– C#/VB – VS2005/VS2008
    • 7. Articles/Dossiers Techniques presse francophone
    • 8. Communautaire
    • 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
    • 14. TechDaysFrance, BeLux, Suisse
    • 15. Wygday
    • 16. E-mail : gregory@wygwam.com
  • Roadmap
    Des nouveautés de C#3/VB9 à LINQ et perspectives
  • Rappel
    Vue d’ensemble des évolutions du .NETFx, des langages et de son IDE
  • 23. De 2002 à 2008
    Source : http://www.danielmoth.com/Blog/2007/06/visual-studio-2008-stack.html
  • 24. De 2002 à 2008
  • 25. .NET Framework 3.5 SP1
    ADO.NET Entity Framework
    ADO.NET Data
    Services
    ASP.NET Dynamic Data
    WPF & WCF Enhancements
    .NET Framework 3.5
    Framework
    LINQ
    WCFWFEnhancements
    Additional Enhancements
    .NET Framework 3.0 + SP2
    WPF
    WCF
    WF
    Windows CardSpace
    .NET Framework 2.0 + SP2
  • 26. .NET Framework & Tools Roadmap
    .NET Framework 3.0
    .NET Framework 3.5
    .NET
    Releases
    3.5 SP1
    Silverlight 2
    .NET 4
    ASP.NET MVC
    Visual Studio 2008
    ASP.NET AJAX 1.0
    Silverlight 1.0
    Tools Releases
    VS 2008 SP1
    VS Tools for SL
    • VS 2005 Ext. for WF
    • 27. VS 2005 Ext. for WCF/WPF CTP
    VS “10”
    Later..
    2007
    2008
    2006
  • 28. Qu’est-ce qui est cool dans.NET 3.5??
    Linq
    Linq to objects
    Linq to xml
    Linq to Sql
    Linq to dataset
    LinqLinqDataSource in ASP.NET
    Linq support in WPF databinding
    Linq
    Linq, Linq, …
  • 29. Qu’est-ce qui est cool dans .NET 3.5??
    Web applications
    ASP.NET AJAX built in
    Application Services Exposed
    ListView control
    Service Applications
    Syndication object model
    WCF support for REST and JSON services
    WCF & WF integration
    Client Application
    Excellent tooling support!
    UIElement3D
    Managed Add-in framework (System.AddIn)
    XBAP support for Firefox
  • 30. Nouveautés des langages
    Vue d’ensemble des évolutions de C# 3.0 / VB 9.0
    • Vue d’ensemble des nouveautés
    • 31. C# v3.0
    • 32. VB v9.0
  • C#, son Historique !
  • 33. C# 3.0, ses objectifs de conception !
    Intégration d’objets, des données relationnelles et du XML
    LINQ
    Enrichissement du langage (C# v1.0, v2.0)
    Basésur la .NET CLR 2.0
    Ajout de nouvellesfonctionnalités
    Lambda expressions
    Détachement du langage des APIs spécifiques
    100% compatible avec les versions précédentes
    C# 3.0 peutêtrecomplètementtraduit en C# 2.0
  • 34. C# 3.0, ses Innovations !
    Query expressions
    var contacts =
    from c in customers
    where c.State == &quot;WA&quot;
    select new { c.Name, c.Phone };
    Expression trees
    Local variable type inference
    Automatic properties
    Lambda expressions
    var contacts =
    customers
    .Where(c =&gt; c.State == &quot;WA&quot;)
    .Select(c =&gt; new { c.Name, c.Phone });
    Partial methods
    Extension methods
    Object initializers
    Anonymous types
  • 35. VB, son Historique !
  • 36. VB 9.0, ses objectifs de conception !
    Intégration d’objets, des données relationnelles et du XML
    LINQ + Intégration XML
    Amelioration du langage
    Amélioration de la syntaxe des tâches typiques
    Ajout de nouvellesfonctionnalités
    Lambda expressions
  • 37. VB 9.0, ses Innovations !
    Query expressions
    Dim contacts =
    From c In customers
    Where c.State= &quot;WA&quot;
    Select New With { Name = c.Name, _ Phone = c.Phone }
    Expression trees
    Implicitly typed local variable
    Deep XML support
    Lambda expressions
    Dim contacts =
    customers _
    .Where(Function(c) c.State = &quot;WA&quot;) _
    .Select(Function(c) New With { Name = c.Name, _ Phone = c.Phone })
    Partial methods
    Extension methods
    Anonymous types
    Object 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.0
    http://msdn2.microsoft.com/en-us/library/7cz8t42e(VS.80).aspx
  • 42. Rappel C#2.0 / VB 8.0
    Types 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/unboxing
    Suppression du Casting implicite
    Gestion de l’erreur lors de la compilation
    Meilleure lisibilité du code
    Meilleures performances
  • 44. Classes partielles (C# - VB)
    Définition d’une classe sur plusieurs fichiers
    Utilité dans la génération de code
    Exploité 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&lt;T, A&gt; (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&apos;itération foreach dans une classe ou une struct sans implémenter l&apos;interface IEnumerable dans son intégralité
    Exécution différée
    Mot 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’instances
    Chargé automatiquement par le CLR
  • 50. Types Nullables (C#)
    Permet d’avoir des types valeurs nullables
    Pratique 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 type
    Déclaration fortement typée
    Doit être directement initialisée
    Variables locales uniquement
  • 53. Initialisation d’objets simplifiée
    Déclaration avec unesyntaxesimplifiée.
    Initialisationd’objettypé
    Person p = new Person {Name = &quot;Chris Smith&quot;, Age = 31};
    Initialisationd’objet avec type anonyme
    varproductInfos = 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ée
    Uniquement pour les collection de classes implementant “IEnumerable”
    List&lt;int&gt; digits = new List&lt;int&gt; { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    List&lt;Test&gt; list = new List&lt;Test&gt;
    {
    new Test{ num = 1, s = &quot;Hello&quot;},
    new Test{ num = 2, s = &quot;World&quot;},
    new Test{ num = 3, s = &quot;From C#&quot;}
    };
  • 55. … Propriétés automatiques
    Déclaration avec unesyntaxesimplifiée.
    Attributs non permis (utiliseralors la méthoderégulière)
  • 56. Types anonymes
    Types automatiquement générés à la compilationvar v = new { Amount = 108, Message = &quot;Hello&quot; };
    Non disponible dans le code source
    Intellisence disponible
    Typiquementutilisédans la clause select des query expression
    Repose surl’initialisationd’objet et collections
    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); }
  • 57. Méthodes d’extension
    Ajout “Virtuel” d’une méthode à un type
    Méthode Static : premier paramètre “this”
    Étend, ne modifie pas le type, override
    Définition du scope par “using namespaces”
  • 58. Expressions Lambda
    Ecriture inline de méthodes
    Lambda opérateur « =&gt; »
    Simplifications d&apos;écriture des entêtes d&apos;une méthode anonyme
    delegateint D1(int i); D1 myDelegate1 = x =&gt; x + 1; int j = myDelegate1(5); //j = 6
    Permet d’écrire une fonction dans une expression et de récupérer un pointeur vers la fonction
    Possibilité de récupérer un arbre d’expression
  • 59. Expressions Lambda
    Exemplesd’expressions lambda
    x =&gt; x + 1 // Implicitly typed, expression body
    x =&gt; { return x + 1; } // Implicitly typed, statement body
    (int x) =&gt; x + 1 // Explicitly typed, expression body
    (int x) =&gt; { return x + 1; } // Explicitly typed, statement body
    (x, y) =&gt; x * y // Multiple parameters
    () =&gt; Console.WriteLine() // No parameters
  • 60. Expressions Lambda
    Inférence de type dans une Lambda
    customers.Where(c =&gt; c.City == &quot;London&quot;);
    Opérateurs de vérification
    Func&lt;int, bool&gt; myFunc = x =&gt; x == 5;
    bool result = myFunc(4); // returns false of course
    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; intoddNumbers = numbers.Count(n =&gt; n % 2 == 1);
    Ne pas confondre avec l’opérateur “&gt;=“
    varfirstSmallNumbers = numbers.TakeWhile((n, index) =&gt; n &gt;= index);
  • 61. Arbres d’expression
    usingSystem.Linq.Expressions;Expression&lt;Func&lt;int, bool&gt;&gt; exprTree = num =&gt; num &lt; 5;
    Les expressions lambda peuvent être traduite
    Code IL
    Arbre d’expressions
    Peuvent être parsés au Runtime
    Utilisés au sein des LinqQuery Provider (Linq to SQL)
    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;
    λ
    *
    i
    i
    i
  • 62. Expressions
    Une expression représente l’arbre d’objets qui représente l’expression passée en argument
  • 63. Méthodes Partielles
    Les types partiels peuvent maintenant contenir des méthodes partielles
    partial class Customer { partial void OnCreated() {Console.WriteLine(“Welcome new customer”); } }
  • 64. VB v9.0
    http://msdn2.microsoft.com/en-us/library/y17w47af(VS.90).aspx
  • 65. Types nullables
    Valid for all value types
    Dim a As Integer?‘Will be Nothing
    a = 123
    a = Nothing‘Boolean HasValue property
    Dim hasValue = a.HasValue‘Get the value via Value property or directly
    Dim value1 As Integer = a.Value
    Dim value2 As Integer = a
    Will throw exception if equal to Nothing
  • 66. Types implicites
    « Dim »
    Déclaration de variable ou Array sans spécifier de type
    Déclaration fortement typée
    Doit être directement initialisée
    Variables locales uniquement
  • 67. Initialisation d’objets
    Déclaration avec unesyntaxesimplifiée
    Mot clé “With”
    Initialisationd’objettypé
    Dim namedCust = New Customer With {.Name = “xxx&quot;}
    Initialisationd’objet avec type anonyme
    Dim anonymousCust = New With {.Name = “xxx&quot;}
    Initialisation d’objet avec un type nullable : compile time error !
  • 68. Types anonymes
    Types automatiquement générés à la compilation Dim product1 = New With {.Name = &quot;paperclips&quot;, .Price = 1.29}
    Non disponible dans le code source
    Intellisence disponible
    Typiquementutilisédans la clause select des query expression
    Repose surl’initialisationd’objet
  • 69. Types anonymes : Key Properties
    Comparaison de deux types anonymes (Key)
    Que les « Key » sont comparées
    Les valeurs des « Key » sont :
    Read-Only
    Ne peuvent être changées
    Seule la valeur d&apos;une propriété « Key » est incluse dans l&apos;algorithme compilateur produisant le code du type anonyme.
  • 70. RelaxedDelegates
    Vraie 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.Click
    MessageBox.Show(&quot;Hello World from&quot; & btn.Text)
    End Sub
    SubRelaxedOnClick() Handlesbtn.Click
    MessageBox.Show(&quot;Hello World from&quot; & btn.Text)
    End Sub
  • 71. Méthodes d’extension
    Ajout “Virtuel” d’une méthode à un type
    Extension attribute &lt;Extension()&gt; de l’espace de nom System.Runtime.CompilerServices
    Étend, ne modifie pas le type, override
    Définition du scope par “imports namespaces”
  • 72. Expressions Lambda
    Ecriture inline de méthodes
    Dim fnums = numbers.Where(Function(n) n &lt; 5)
    Lambda opérateur « Function »
    Simplifications d&apos;écriture des entêtes d&apos;une méthode anonyme
    Permet d’écrire une fonction dans une expression et de récupérer un pointeur vers la fonction
    Possibilité de récupérer un arbre d’expression
  • 73. Meilleur support XML
    Modèle hiérarchique de programmation simplifié
    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;
    Console.WriteLine(book.@Title); Console.WriteLine(book.&lt;author&gt;.@Name); Console.WriteLine(book...&lt;origin&gt;);
    Next
    Inline XML
    Child axis .&lt; (for iteration)
    Attribute axis (.@)
    Descendant axis …search in all descendants
  • 74. Meilleur support xml
    LINQ query
    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;
    ASP-alike embedded expressions
  • 75. Autres amélioration VB v 9.0
    Friend assemblies
    InternalsVisibleTo attribute recognized
    Runtime agility
    Compile without Microsoft.VisualBasic.dll
    Need originates from CF and Silverlight
    New /vbruntime switch
    Improved generic type inferencing
    Calling 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éfinition
    Linq = LanguageINtegratedQuery
    Exemples
    DLinq = Database + Linq
    Appelé maintenant Linq to Data
    Xlinq = XML + Linq
    Appelé maintenant Linq to XML
  • 78. LINQ : Concepts
    Linq =
    innovation de VS2008 et .NET 3.5
    Change radicalement le travail de données
    Avantages
    Simplifie l’écriture des requêtes
    Unifie la syntaxe de requêtes pour tout type de source de données
    Renforce la connection entre les données relationnelles et le monde de l’OO
    Accélère les développements
    Gestion des erreurs à la compilation
    Intellisense et debugging
  • 79. LINQ : Fondations C# v3.0 – VB v9.0
    Query expressions
    var contacts =
    from c in customers
    where c.State == &quot;WA&quot;
    select new { c.Name, c.Phone };
    Expression trees
    Local variable type inference
    Automatic properties
    Lambda expressions
    var contacts =
    customers
    .Where(c =&gt; c.State == &quot;WA&quot;)
    .Select(c =&gt; new { c.Name, c.Phone });
    Partial methods
    Extension methods
    Object initializers
    Anonymous types
  • 80. LINQ : Architecture
    Others…
    VB
    C#
    .NET Language Integrated Query (LINQ)
    Sources de données LINQ
    Linqsur des sources ADO.NET
    LINQ
    To XML
    LINQ
    To Entities
    LINQ
    To SQL
    LINQ
    To Datasets
    LINQ
    To Objects
    Provider
    &lt;book&gt;
    &lt;title/&gt;
    &lt;author/&gt;
    &lt;price/&gt;
    &lt;/book&gt;
    XML
    Relationnel
    Objets
  • 81. Une syntaxe unique pour plusieurs sources de données
  • 82. LINQ : 3 parties de toute requête
    Touterequête LINQ consiste en 3 actions essentielles :
    Obtention de la source de données(xml, db, Objects)
    Création de la requête
    Exécution de la requête
  • 83. LINQ : Framework
    L’architecture à la base de Linq est constituée de deux parties
    LINQ Language Extensions Un langage de programmation implémentant les extensions de langage LINQ
    C# et VB implémentés au sein de VS2008
    LINQ Providers Provider LINQ implémentant les Standard QueryOperator méthodes pour chaque source de données spéficique.
  • 84. LINQ : Requête de base
    IEnumerable&lt;Customer&gt; customerQuery = from cust in customers //...
    Exemple :
    List&lt;int&gt; numberList = new List&lt;int&gt; { 1, 2, 3, 4 };var query = from i in numberList
    where i &lt; 4
    select i;
  • 85. Query Expressions
       var locals = from c in customers
    Wherec.ZipCode==91822
    select (new {FullName=c.FirstName + “ “ + c.LastName, HomeAdresse=c.Address});

    var locals = customers .Where(c =&gt; c.ZipCode == 91822) .Select(c =&gt; new { FullName = c.FirstName + “ “ + c.LastName, HomeAddress = c.Address });
  • 86. Linq or not : Différence ?
    C#2
    List&lt;City&gt; returnCities = new List&lt;City&gt;();
    Foreach (city c in cities)
    {
    If (c.Name==« London »)
    returnCities.Add(c);
    }
    C#3
    var query= from c in cities
    Where c. Name==« London »
    Select c;
  • 87. Exprimer la sémantique d’une requête et non son implémentation
  • 88. LINQ : Projections - SELECT
    Utilisation du Keyword “Select”
    Nécessité de modifier, transformer les donnéesretournées par unerequête LINQ
    LINQ 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&lt;City&gt; cities = CityUtilityHelper.GetCities();
    var places = from city in cities
    where city.DistanceFromSeattle &gt; 1000
    select 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 Operators
    C# 3.0
    VB 9.0
    from .. 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 While
    Aggregates: All, Any, Average, [Long]Count, Max, Min, Sum
    Les opérateurs sont implémentés via des méthodes d’extensions
  • 91. Vos questions …
  • 92. Conclusions
    Vue d’ensemble des évolutions du .NETFx et de son IDE
    • Nouveautés de C# v3.0 / VB 9.0
    • 93. Des nouveautés à LINQ : un pas ?
    • 94. LINQ : .NET Language-IntegratedQuery
    … Vos Questions ?