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

Découvrir LINQ en C#

Écrire des jointures croisées et des sous-requêtes

Testez gratuitement nos 1343 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Voyez comment effectuer des jointures croisées pour retourner le produit cartésien de plusieurs collections, et en écrivant plusieurs clauses from. Apprenez ensuite à filtrer avec Where.
06:29

Transcription

Continuons avec nos jointures. Juste pour revenir sur ma jointure de groupe, voyez ici que Martin, Paul, Anne, Sylvie. Anne et Sylvie n'ont pas d'enfants, est-ce qu'on peut les filtrer ? J'ai fait une jointure de groupe, mais j'aimerai avoir uniquement des parents qui ont des enfants. Bah oui, bien sûr, comment on fait ? En dessous du join, on va rajouter une clause where. C'est évident, et on va dire, on va dire quoi ? Qu'est-ce qu'on va utiliser ? Notre into GE contient donc un tableau de zéro items, donc je peux très bien faire ceci, GE. Count est plus grand que zéro, ce qui me donne uniquement les parents qui ont des enfants. Donc bien entendu, à tout moment, vous pouvez reprendre un where, et faire même des choses plus compliquées que ça. Comme des from successifs, d'ailleurs, c'est ce que je vais faire. Parce qu'on peut se poser une question, comment est-ce qu'on va exprimer un cross join, par exemple ? Une jointure croisée qui correspond à un produit cartésien, de mes deux collections. Il n'y a pas vraiment de cross join, ni d'auto join, d'ailleurs. Nous n'avons que la syntaxe join, donc comment va-t-on faire ? Au lieu de faire un join, je vais faire un from supplémentaire. Bien entendu, à ce moment-là, je n'ai plus de on. Je n'ai plus de clause where à mettre également. Et, ici, je vais revenir à ma syntaxe première, qui est celle-ci, qu'est-ce que ça fait ? Bien sûr, un produit cartésien. Donc, sans aucun sens particulier, chaque élément des parents auront le même élément d'enfants, Martin à Rose, Mathieu, Cerise. Paul, de nouveau, Anne de nouveau, etc, je fais un produit cartésien. Je multiplie chaque élément de ma collection, par le nombre d'éléments de la collection sur laquelle j'ai fait un from. Et je peux continuer comme ceci à faire des from successifs. Je n'ai pas de limitations par rapport à ça, on n'est pas dans le langage SQL, on est en Linq. Et en utilisant ceci, comment est-ce qu'on pourrait faire quelque chose comme une inéquijointure. C'est-à-dire dire, je veux, eh bien, joindre les parents et les enfants sur autre chose qu'une égalité. Eh bien, voilà j'ai un cross join, c'est-à-dire j'ai une jointure ici croisée. Et je peux, ensuite, utiliser ici le where, pour dire quelque chose comme ça, je veux par exemple, que l'Id de parents soit différent, du parent Id des enfants. Et donc, j'ai une inéquijointure, j'ai quelque chose qui va dire, je veux avoir tous les parents avec les enfants qu'ils n'ont pas. Et, donc ça me donne Martin n'est pas parent de Cerise, Paul n'est pas parent de Rose et Mathieu, etc. Et donc, en faisant ça, je peux avoir quelque chose comme l'équivalent d'un left join, d'une jointure externe avec une clause where, qui filtre, en faisant, simplement ceci. Je veux le nom des parents, quand ils ne correspondent pas aux enfants. Ce n'est pas tout à fait ça, d'ailleurs, on va avoir tous les parents, on est d'accord. Plusieurs fois, non ce n'est pas tout à fait ça que je veux. Si je veux faire une jointure externe, comment est-ce que je peux faire ? Il n'y a pas de syntaxe ici. Alors, déjà, on va voir ça dans la prochaine vidéo, mais une première réflexion, je peux utiliser quelque chose comme ceci. Mes enfants, et je vais faire, une sous-requête finalement. Je peux faire ma sous-requête de deux façons. Soit directement, soit je l'attribue à une variable et je la réutilise. Je vous montre la première syntaxe, qui a une syntaxe de sous-requête. Je vais dire ici dans mon where, je veux trouver les parents, qui n'ont pas de correspondance dans la liste des enfants. C'est-à-dire, tous les parents, ou l'Id, ne se retrouvent pas dans la liste des Id existant dans les enfants, d'accord ? Alors, je vais faire une sous-requête, donc, parenthèse, je fais ceci, from e in enfants, et qu'est-ce que je fais dans ma sous-requête ? Un select, bien sûr. Je fais un select de e parent Id. Ici, j'ai récupéré les parents Id. Et, je vais utiliser un test Linq. Alors, d'accord, on ne l'a pas encore vu, mais on va le voir, qui s'appelle contains et donc il va tester simplement, est-ce que un élément est contenu dans les possibilités d'une collection ? Ça veut dire, est-ce que la liste de ces parents Id, contient quoi ? Mes P Id, bien sûr. Alors là, bien sûr, je vais avoir la liste des parents, on va le faire, qui ont des enfants, Martin et Paul. Évidemment, si je veux la liste des parents qui n'ont pas d'enfants, je fais une négation. Et voici les parents qui n'ont pas d'enfants. Ça c'est une syntaxe finalement facile à comprendre, mais qui nous montre la puissance de Linq aussi, en terme d'expression de sous-requête. De toute façon, c'est évident, on va faire une sous-requête qui nous retourne à IEnumerable, sur lequel on va pouvoir travailler de nouveau en Linq. OK, mais ce que je peux faire également, c'est avoir une syntaxe, sous forme de variable, pour dire let, vous vous souvenez. Par exemple, les Id des enfants, qu'on va trouver, est égal à, et je reprends ceci. Tout simplement, je le mets ici. J'ai fait mon select, maintenant cette variable va contenir un IEnumerable de parent Id. Et donc, je peux reprendre ceci directement ici. De façon à faire la même chose, ça dépend de comment vous préférez, la lisibilité de la syntaxe sous-requête ou de la syntaxe avec un let, qui l'attribue à une variable. Ça peut être aussi plus pratique de faire un let, si vous avez besoin de réutiliser votre sous-requête, plusieurs fois dans le reste de votre expression Linq. Et donc, on a la même chose.

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 !