Découvrir LINQ en C#

Convertir les éléments et les collections

Testez gratuitement nos 1327 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Découvrez les méthodes de conversion de données telles que Cast, pour convertir les éléments de vos collections. Puis, voyez les méthodes comme ToList pour convertir le type de la collection elle-même.
06:52

Transcription

Linq vous propose également des méthodes de conversion de type qui vont vous permettre de retourner une forme de collection ou une autre. Ce que je veux dire par là, c'est que si je prends ici mon résultat. On est d'accord, celui que je viens de créer avec un énumérable, le type c'est un IEnumerable de T, T étant un Int32. Donc, qu'est-ce que je peux faire ? D'abord, convertir le contenu lui-même, c'est-à-dire, OK, j'ai mon résultat, je vais utiliser la méthode Cast, pour dire, et comme c'est un générique, je vais lui envoyer également le type, par exemple, un Int64. C'est-à-dire, un long, même chose, pour dire voilà, tu vas me faire un Cast, de quoi ? Eh bien, de tous les éléments. Si je fais ça, et je l'attribue, je vais l'appeler res2, par exemple, pour aller plus vite, ici. J'ai un IEnumerable de T, T étant maintenant un long ou un Int64. Ce que je fais donc, j'ai effectivement converti tous les éléments de la collection. J'ai fait un Cast du contenu de la collection, d'un type vers un autre. Bien entendu, il faut que ce soit possible. Ça, c'est une première chose, je convertis le contenu de la collection. Mais la collection elle-même, eh bien, je vais avoir d'autres méthodes de conversion du type de la collection, qui va être par exemple, ToList. Et là, je n'ai pas grand-chose à faire de plus que ça, et, au lieu d'avoir un IEnumerable, j'ai maintenant un type List de T, List de long, de Int64. Ce qu'il faut dire, je peux convertir également, je vais le prendre comme ceci, et je vais vous conserver ça. Je peux également le convertir en tableau, purement et simplement, en faisant un ToArray. Et maintenant, j'ai donc un tableau de long. Pourquoi est-ce que j'aurai besoin de faire ce genre de choses ? Bien entendu, dans des situations où je dois passer en paramètres, ou à travailler avec un type spécifique, un tableau, une liste, un dictionnaire, je peux également générer un dictionnaire. Donc, je reprends ceci, je vous le conserve. Et, je vais dire ToDictionary, un dictionnaire, c'est donc bien entendu quelque chose qui a une clé et une valeur. C'est une liste de paires clé-valeur. Et donc, j'ai plusieurs surcharges disponibles, de la méthode ToDictionary, qui vont me permettre d'exprimer la clé et la valeur. Typiquement, le plus simple je vais prendre la première, un key selector. Et je vais dire à l'aide, vous voyez que c'est un Func, dont c'est une fonction. Donc, je dois renvoyer une adresse de fonction, donc, je me répète, j'envoie une fonction anonyme, et donc, je fais une expression lambda. On est d'accord, je vais dire K pour key, par exemple, et je vais choisir juste K, en disant, bah voilà, je fais un dictionnaire, et la clé, c'est le contenu lui-même, qui est déjà un long, et donc ça me fait, un dictionnaire de clés et de valeurs qui sont toutes les deux, des long, des Int64. La clé étant exprimée ici par la valeur elle-même, et la valeur étant prise automatiquement avec cette signature-ci, comme étant le contenu de la collection. Vous avez compris ce que je veux dire. Ça ne sert à rien d'ailleurs ce que je fais ici, puisque je fais un dictionnaire dont la clé et la valeur sont identiques, donc ce n'est pas très très intéressant. Par contre, ce qui peut être intéressant, c'est de prendre une collection d'objets, et de les stocker dans un dictionnaire, de façon à pouvoir les rechercher, plus rapidement par rapport à une clé, qui serait un des éléments, c'est-à-dire une des propriétés, un des membres, de l'objet lui-même. Prenons l'exemple simple de mes sessions. On se souvient, ici, mes sessions, c'est une liste d'objets-sessions. Et donc, je pourrais transformer cette liste, comme ceci, je prends mes sessions, je dis OK, de mes sessions, je veux faire un dictionnaire. Je peux exprimer les types. Mais, je vais faire en sorte que le compilateur infère les types. C'est-à-dire, je vais ici envoyer, avec une signature particulière qui va dire, eh bien, je vais faire, vous voyez, une fonction ici pour la clé et une fonction pour l'élément. Donc, je vais envoyer deux lambdas, séparés par une virgule, premier lambda, dans le premier paramètre ici, pour déterminer quelle est la clé. Et en second lambda, donc deux fonctions anonymes, un second lambda pour l'élément. Donc très simplement, je fais K, et je vais prendre un des éléments de la session, typiquement le SessionId. Je vais donc choisir le SessionId comme la clé de mon dictionnaire, et ensuite la valeur, je vais faire V, je vais mettre l'objet lui-même, tout entier. Et voilà, qui me donne en résultat, un dictionnaire de Int32 en clé, et de sessions en valeur. Donc ça, ça peut être très pratique pour ensuite manipuler plus simplement les sessions en les cherchant par Id, ou par un quelconque autre membre en clé. Notons que vous avez aussi la possibilité de faire un ToLookup. La différence entre un dictionnaire et un Lookup, c'est que ici, le SessionId va fonctionner, mais si j'essaie de prendre quelque chose comme un titre, par exemple, eh bien, ce n'est pas terrible. Parce que le titre ne va pas forcément être unique, et pour faire un dictionnaire, il faut bien entendu que les clés soit uniques. Ce n'est pas le cas du Lookup. Le Lookup en plus, il a une différence, c'est qu'il est immutable. Donc, vous le créez une bonne fois pour toute, et, il se peut que dans certains cas, cela soit plus rapide que le dictionnaire. Parce qu'eh bien, le dictionnaire lui, est mutable, le Lookup est immutable, on ne peut pas le modifier. Il est fixé une bonne fois pour toute. Ça peut apporter des améliorations de performance. Ce qui n'est pas du tout certain, les implémentations internes étant assez bonnes de toute façon. Mais le Lookup ne vous oblige pas à avoir des clés uniques. Donc voilà, pour ces méthodes, elles sont disponibles uniquement dans cette syntaxe. En méthode, ce que nous appelons la syntaxe Fluent en Linq. Vous n'avez pas bien sûr de possibilité de le faire dans une syntaxe Requête. Sauf en mettant des parenthèses autour de votre requête et en utilisant ensuite la méthode par rapport aux résultats bien sûr. Mais vous pouvez donc faire de la conversion des éléments, et puis de la conversion ici, de la collection elle-même dans un type compatible.

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 !