Nous mettrons à jour notre Politique de confidentialité prochainement. En voici un aperçu.

Découvrir LINQ en C#

Utiliser les méthodes d'agrégation

Testez gratuitement nos 1336 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Dans cette séquence, vous allez passer en revue les méthodes d'agrégation comme Min(), Max(), Sum() et Aggregate().
08:47

Transcription

Je vais maintenant rester quelques minutes avec la syntaxe Méthode, parce qu'on va utiliser des méthodes specific Linq pour les agrégations. Alors, voilà, il y en a quelques unes, je vais revenir sur mon Select ici, pour récupérer seulement une valeur spécifique, par exemple, le titre. Et donc, bien entendu, mon résultat maintenant, c'est donc un IEnumerable de string, c'est logique. Qu'est-ce que je peux faire ensuite ? Eh bien, continuer à travailler en Linq, après le Select, pour dire, je voudrais le Min, simplement, je voudrais le Max, donc le plus grand et le plus petit des titres qui est maintenant donc dans mon IEnumerable de string, qui sont des titres, d'accord ? Je peux aussi d'ailleurs, me passer de ça. Je peux dire je vais faire un Max, et vous avez l'habitude maintenant, on fait une lambda, en disant, un Max de quoi ? Eh bien, des titres. Même résultat. Le résultat donc maintenant n'est plus un IEnumerable, puisqu'on a une agrégation qui retourne une valeur scalaire, et donc j'ai le type résultat de ceci. Le titre étant un string, je récupère le Max de ma collection de titres, de string, donc j'ai donc un string, le Max ou le Min, c'est évident. J'ai également une fonction d'agrégation qui fait la somme. Évidemment dans ce cas là, on ne va pas faire une somme de titres. Cela n'a aucun sens, Visual Studio nous dit, non, on ne peut pas convertir implicitement un string en décimales, d'accord, d'accord. On va prendre autre chose alors. Évidemment, si je fais une somme, il vaut mieux avoir des valeurs numériques, comme le nombre d'inscrits. Et ici, j'ai donc, un Int32. Il reste une dernière fonction d'agrégation, un peu générique, que je vais vous montrer, on ne va peut-être pas l'utiliser forcément tous les jours, mais elle existe. Donc, je vais garder ici mon Select de titre, Et puis, maintenant j'ai donc un Enumerable de string, et je vais utiliser une fonction qui s'appelle Aggregate à laquelle, il faut quand même que je passe quelque chose, pour le coup. Aggregate va me demander une fonction anonyme qui prend deux paramètres. Donc je vais les exprimer comme ceci. Je vais dire par exemple, A virgule B, ou S1 virgule S2, et si je l'exprime comme ceci, eh bien, je dois mettre mes deux paramètres entre parenthèses, et ensuite, mon opérateur lambda. Et je vais dire, fais quelque chose, par exemple, S1 plus, on va rajouter une virgule ici, et, S2. Vous devinez peut-être le sens de tout ceci ? L'Aggregate va agréger, et donc, il va y avoir une boucle, qui va appliquer une fonction d'accumulation sur la séquence. On va prendre le premier titre, qui viendra ici. Le deuxième titre viendra ici, et on va simplement concaténer ici les titres jusqu'à arriver à la fin. Je vous montre le résultat d'ailleurs, on va faire ici n'importe quoi, d'ailleurs. Peu importe, on va mettre un point d'arrêt et on va regarder ce qui apparaît. J'exécute rapidement. Voilà, vous voyez le résultat 2, c'est, SQLServer, Découverte, c'est les titres de mes sessions, virgule, MySQL, virgule, MySQL 5.2, etc. Donc, ce qu'il faut dire, on a fait une concaténation. Alors, OK, attendez, ne dites pas, ouais, on a fait une concaténation avec du Linq, il y a un tout petit mieux à faire que ça si vous voulez juste faire une concaténation. Entre nous, vous allez utiliser plutôt depuis .NET 4, il y a une méthode statique de la classe string, qui s'appelle join, à laquelle vous pouvez envoyer en premier paramètre, un séparateur, et en deuxième paramètre, eh bien, à une collection, un tableau des éléments à concaténer. Donc, ce serait notre résultat 2 ici. Si j'avais, on est d'accord, laissé tomber ceci, ce que je vais faire comme ça, voilà. Alors, quand je dis on est d'accord, résumons-nous quand même, ah oui, il faut que je mette dans quelque chose. Bien entendu, et par exemple, je pourrais dire ça. Alors, oui, résumons-nous, pour être bien d'accord, qu'est-ce qu'on met dans résultat 2 ? On fait nos tris, on fait un Select des titres donc, on a un IEnumerable de string, donc on a une collection de string, qu'on peut convertir en tableau de strings, qui est fait ici. Et ensuite la méthode statique de string, va s'emparer de cette collection, et puis la joindre avec ces séparateurs. Et, le string join, a aussi un avantage en terme de performance. Parce que si je fais, alors je vais enlever ça, je reviens sur mon idée de base, qui était celle-ci, si je fais ça, je suis en train de concaténer des chaînes, qui sont des strings, donc des strings immutables, donc je suis en train de recréer chaque fois des strings, pour stocker le résultat. Oui, d'accord, je ne peux pas faire des ajouts de strings. Donc, si j'ai une longue liste, ça peut être un peu pénible en terme de performance, simplement. Donc, si vous utilisez Aggregate, vous allez plutôt l'utiliser pour des choses un peu plus subtiles ou compliquées à faire que ça, avec une fonction d'agrégation particulière ici. Que vous pouvez d'ailleurs exprimer, alors je vais vous montrer encore quelque chose, pendant qu'on y est, avec une syntaxe plus compliquée que ça. Parce que mon Aggregate maintenant, ici, je lui passe mes paramètres. Mais je peux lui passer en premier, paramètre, voyez ici, un TAccumulate, un seed, en fait, par quoi je vais commencer ? Je peux commencer ici, avec mon TAccumulate, c'est-à-dire une valeur initiale, comme valeur d'accumulation initiale, par la création d'un objet, ce que je vais faire ici, c'est juste créer un StringBuilder. Ça c'est la première chose qui va être fait, et ensuite, le StringBuilder maintenant, sera le type de S1 que je vais pouvoir récupérer ici, avec, par exemple, un AppendFormat, où je vais dire, eh bien je veux ça. Et ça, et puis je vais lui envoyer S2. Je commence à faire des choses un peu plus compliquées, c'est ça l'intérêt de l'Aggregate si vous l'utilisez. Vous pouvez même faire, encore un tout petit peu plus compliqué, ici, votre lambda, elle écrit une seule opération, mais si vous voulez faire plusieurs choses dans votre fonction anonyme, eh bien, vous faites un bloc. Et vous commencez à travailler à l'intérieur de votre bloc. Comme c'est une fonction, elle va faire un Return, alors déjà, comme ceci, elle va faire un Return, de S1, puisque je continue à faire des Append, voilà, vous voyez, ça va mieux, et puis je peux faire des tests. Par exemple, if, eh bien, la longueur de mon StringBuilder, est plus grand que zéro. Alors, je fais mon Append, avec des virgules, else, je fais simplement, un Append de S2. Donc, je peux faire quelque chose d'un peu plus compliqué, et toute cette fonction va être prise par l'agrégateur. Première étape, on crée un StringBuilder, ensuite, on le passe en paramètre, et puis on continue en boucle, à agréger par dessus. Mais bon, on est d'accord. Ne faites ce genre de choses que lorsque vous en avez vraiment besoin, peut-être il pourrait être un peu plus lisible de faire dans ce cas là, une vraie boucle. Parce que là, le langage n'est plus très très déclaratif, on est en train d'imbriquer des choses qui sont plus des longues fonctions anonymes, ce n'est pas forcément une bonne pratique ou une bonne syntaxe, en tout cas.

Découvrir LINQ en C#

Apprenez à manipuler des éléments de collection de façon déclarative avec LINQ. Étudiez la syntaxe, l’utilisation de la clause Where et la projection, triez les résultats, etc.

2h34 (31 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :19 janv. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !