Découvrir LINQ en C#

Écrire une jointure en syntaxe de requête

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Écrivez une jointure sur des collections d'objets. Puis, utilisez la syntaxe en requête, nettement plus lisible dans ce cas.
05:27

Transcription

J'ai réorganisé un peu l'affichage pour voir plus de choses dans LINQPad sur mon code et au lieu d'utiliser des listes de string eh bien j'ai fait des tableaux d'objets. Alors, j'ai programmé un peu avec les pieds, je suis d'accord, mauvaise pratique, mais c'était pour vous montrer aussi, pour m'amuser un petit peu, comment on peut faire les choses très rapidement. Je fais donc une variable qui est un tableau, je fais donc cette syntaxe, je crée un nouveau tableau et je fais une initialisation de mon tableau automatiquement avec - ça ce n'est pas terrible quand même, mais bon - chaque fois de nouvelles instances de classe anonyme. Autant faire une classe non anonyme et puis faire de nouvelles instances de ma vraie classe, c'est quand même un peu plus propre. Mais là c'était pour vous montrer que c'est tout à fait possible, on fait une initialisation de collection, de tableau, et puis à l'intérieur, chaque fois, des new classe anonyme, en mettant directement l'initialisation de la classe à l'intérieur. J'ai fait la même chose avec mes enfants donc j'ai des parents avec des noms et des id, j'ai des enfants avec des noms et des parentId, vous avez compris le principe, maintenant ce que je veux faire, c'est joindre les enfants avec leurs parents. Bon, j'ai fait un Dump des parents et des enfants, vous voyez que ça tient la route, et puis maintenant je vais faire ma jointure. Je vais une dernière fois la faire en notation méthode, en notation fluent. Attention. On prend donc les parents, c'est logique, et on va dire: on va faire une jointure avec les enfants. Donc je reprends ici ma notation. Première chose, je corrige parents, c'est au pluriel, Donc, première chose, enfants, c'est la collection sur laquelle je vais joindre avec parents. Je vais dire p pour parents, par exemple, je vais choisir quoi dans parents, pour faire la jointure ? L'id, bien entendu. Donc: p.id Ensuite, dans enfants, je vais choisir quoi pour faire la jointure ? parentId, allez, un petit copier-coller, e par exemple pour enfants, et donc: e.parentId, et enfin, qu'est-ce que je retourne ? Bon, vous avez vu, comme j'aime bien faire des classes anonymes, ici - encore une fois, ne faites pas comme moi - et donc, je corrige ça, qu'est-ce que je vais faire ici? je vais faire: (p, e) avec une lambda qui va me retourner une nouvelle classe anonyme qui va contenir... eh bien par exemple je vais mettre les noms. Je vais dire parent = p.nom, on est d'accord, virgule, enfant = e.nom. Voilà déjà quelque chose d'un peu plus compréhensible. On est d'accord, cette syntaxe est un peu lourdingue, on va, allez, basculer, après avoir vu le résultat, bien sûr. Pas mal, non? Martin, c'est le papa de Rose, on est d'accord, et de Mathieu. Tout à fait. Et donc on voit que ça fonctionne, on va quand même l'écrire un peu différemment. C'est pas extraordinaire, comme syntaxe, donc je vais mettre ça en commentaire, d'ailleurs, tout ça, et puis je referai un Dump, je le mets en commentaire en-dessous comme ça c'est plus lisible sur votre écran, et on va passer à une syntaxe en requête. Donc, vous vous souvenez? Facile: from parents et on lui place un alias, donc même chose, p in parents. Ensuite, eh bien, comme dans un langage SQL traditionnel, join e in enfants, ensuite on va dire: on, pour l'instant tout va bien, on va prendre p.id, et là... alors attendez, ne faites pas ça. Ne faites pas ça. L'égalité, c'est un opérateur qui va comparer deux choses, de façon scalaire, et ici, eh bien pour l'implémentation interne de LINQ, comme cette comparaison pour la jointure peut être faite finalement de façon différente s'il s'agit d'une opération qui va être transformée en equariable, etc., on a besoin d'un opérateur particulier pour la jointure, pour l'équi-jointure, qui va être equals. Ca va permettre à LINQ de dire: ah ça, c'est en fait l'expression qui va vérifier la jointure, et permettre de faire la jointure entre les deux collections. L'égalité, dans le sens de l'opérateur traditionnel d'égalité, ne va pas fonctionner. Vous devez mettre cet opérateur spécifique, le mot-clé equals. Et ensuite? Eh bien, ensuite, trop facile, finalement, on peut reprendre la même chose que ça. Et je le mets dans un select, bien sûr. Mon select va sélectionner quoi ? De nouvelles instances de classe anonyme, qui vont comporter le nom du parent et le nom de l'enfant. On essaye ? Voilà : même chose. D'une façon quand même nettement plus lisible.

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 !