Découvrir LINQ en C#

Réaliser une jointure externe

Testez gratuitement nos 1326 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Apprenez à écrire une jointure externe en utilisant la méthode DefaultIfEmpty. Vous allez traiter les non-correspondances.
05:33

Transcription

Il y en a des choses en Linq, non ? Choses très intéressantes qui vont nous permettre de passer à un autre niveau de programmation, en C#, .VB.NET, ou en F#. Bon, il me reste une dernière chose à vous montrer dans la syntaxe Linq pour que vous soyez totalement opérationnels. Alors, attention, c'est parti, il reste un petit quelque chose. Et, je me suis remis ici dans un contexte où j'ai deux collections, où je vais faire une jointure, vous vous souvenez. Je prends les parents et les enfants, en utilisant la syntaxe join, et on a dit qu'il était possible de faire des jointures externes, et on va voir comment. Alors, pour voir comment, il faut que je vous parle d'une dernière méthode, et avant de vous en parler dans le contexte d'une jointure, c'est peut-être un peu plus simple de vous la montrer directement. Donc, je vais commenter ceci, je vais reprendre mon var, res, et je vais faire quelque chose comme, allez, une collection vide d'entiers. Est-ce que vous vous souvenez comment on fait une collection vide ? Il y a une classe statique, qui a une méthode statique qui s'appelle Empty, qui est générique, et voilà, non ? Et voilà ! Alors on vient de voir qu'on pouvait faire des choses sur des collections, comme first, last, des skip, des take, est-ce que je peux dire, et surtout, des FirstOrDefaults, le default revenant par exemple à null, ou ici à zéro, en l'occurrence, si je suis sur des entiers ? Mais est-ce que je peux dire, oui d'accord, regarde, mais si la collection est totalement vide, eh bien tu me ramènes quelque chose quand même ? Eh bien, c'est notre dernière méthode, elle s'appelle DefaultIfEmpty. Et là, je me suis simplifié la vie, c'est des entiers, je vais lui dire OK. Tu me retournes l'entier 1 si la collection est vide. On essaie. Et voilà, j'ai un IEnumerable d'entiers, avec 1 à l'intérieur. DefaultIfEmpty, bien entendu, c'est très sympa. Parce que le DefaultIfEmpty me retourne la collection elle-même, si elle n'est pas vide. Donc, je peux utiliser DefaultIfEmpty pour dire dans le cas où il n'y a rien, tu me retournes quand même quelque chose qui va être un défaut. Vous allez me dire, à quoi ça va me servir pour faire des left join ? Le left join, c'est quand même quelque chose comme ça. On va avoir d'un côté des correspondances, de l'autre côté, rien, et donc, si c'est un inner join, on ne retourne rien du tout. Si c'est un left join, il faut qu'on retourne un des côtés de la correspondance. Et donc, comment est-ce qu'on va faire ça avec notre jointure ? Eh bien, d'abord, je vais prendre ma jointure et la mettre dans un alias, dans une variable. Par exemple, j pour dire c'est ce qui a été joint, ensuite. Je refais un from, et je vais reprendre e, d'ailleurs, in j, et donc ce j, dans la jointure, va contenir soit la correspondance, soit quelque chose de vide, n'est-ce pas ? Alors, si c'est quelque chose de vide, pourquoi est-ce que je n'utiliserai pas, justement, DefaultIfEmpty ? Je suis sur un DefaultIfEmpty, et donc je vais retourner quelque chose qui est, eh bien, la valeur par défaut de quoi ? D'un IEnumerable, bref d'un objet, ça va être nul. OK, donc ici je vais avoir mes parents, et puis les enfants qui vont contenir soit, eh bien, l'objet lui-même, l'enfant, soit du nul. Et donc, il ne me reste plus ici qu'à tester un peu mieux, donc je vais formater pour que ça soit plus lisible, voilà. C'est surtout ici sur mon enfant qu'il faut que je réagisse. Maintenant, mon nom va être plutôt nul, et je risque d'avoir eh bien, une NullReferenceException, sur quoi ? Sur ça, quand c'est nul, donc il faut que je teste. Qu'est-ce qui va être nul, tout e, n'est-ce pas ? Parce que ça va contenir soit mon objet d'enfant, soit un null. À ce moment-là, je vais faire un test, et je ne vais pas pouvoir utiliser l'opérateur de Coalesce, c'est-à-dire, ça. Parce qu'il faut d'abord entrer dans le nom et quand, e va être null, il va me dire ah non je ne peux pas, avant de tester sur le Coalesce. Donc je vais devoir le faire vieille méthode, avec l'opérateur Ternaire, c'est-à-dire, e est null, alors, dans ce cas, on fait quelque chose comme chaîne vide. Sinon, on prend le nom, vous me suivez ? On essaie, de toute façon. Et voilà, j'ai bien Martin, Paul, Anne et Sylvie, j'ai deux fois Martin, parce qu'il a deux enfants, mais Anne et Sylvie n'ayant pas d'enfants, eh bien, je retourne des chaînes vides, et j'ai fait dans l'effet, un left join. Waouh, un petit peu plus compliqué, mais réfléchissez-y, inspirez-vous de cette syntaxe, ça a un certain sens, en Linq, et ça va vous servir sans doute.

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 !