Découvrir LINQ en C#

Comprendre la syntaxe d'une requête

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Dans cette vidéo, vous allez maintenant exprimer la même fonction LINQ Count(), en utilisant une syntaxe de requête.
05:03

Transcription

Maintenant que nous avons compris la syntaxe sous forme de méthode, voyons la syntaxe sous forme d'expression de requête. Donc je vais récupérer ceci, et puis le commenter, comme ça, on aura un point de comparaison, et mon résultat va être égal à... Eh bien ici je vais mettre quelque chose d'assez nouveau, d'assez inédit si vous n'en avez pas l'habitude, je fais faire une requête. Si vous avez l'habitude du langage SQL, vous verrez quelques similarités. J'enlève ceci et je vais dire : from s, je vais reprendre le même nom de variable, in _sessions, et puis en dessous, eh bien je vais filtrer, where s.Inscrits, puisque s va contenir un élément de ma collection, est égal à 15, comme on l'a fait, et ensuite un select. Et je vais faire un select directement de s. Bon, ici j'ai déjà quelques erreurs qui me disent : « oui, ton résultat c'est une chaîne de caractères, un string », « mais toi, ici, tu vas envoyer, quoi, un IEnumerable ». Donc ça veut dire que le select ici va générer un IEnumerable, donc à nouveau un énumérable de sessions qui vont être générées à partir du filtre. Et maintenant je vais devoir manipuler cette nouvelle liste de sessions qui vient de la requête. Dans les faits, j'ai regénéré une nouvelle liste à partir d'une requête purement déclarative. Ce que vous pouvez voir également, c'est que cette syntaxe s'approche quand même du langage SQL. A la différence près qu'elle est inversée par rapport à une requête SQL traditionnelle, qui ferait quelque chose comme ceci : Par exemple - bien qu'il n'y ait pas de colonne Inscrits, ça vient d'une procédure stockée qui les calcule, mais c'est un peu la correspondance -, donc : SELECT *, FROM Sessions, WHERE Inscrits, est égal à 15. On est à peu près dans la même configuration ici. Sauf que bien entendu, dans le langage SQL, le SELECT vient d'abord. En tout cas il vient d'abord dans l'expression de la requête, dans la syntaxe. Mais un moteur SQL, comme SQL Server, a en interne un ordre logique d'évaluation de cette expression. Ce que je veux dire par là, c'est que - et c'est assez logique - SQL Server va commencer par faire le from pour aller chercher la table, ensuite il va la filtrer avec le where, et enfin, le résultat étant filtré, il va faire le select pour récupérer les colonnes demandées. Donc quelque part, cet ordre ici que vous avez dans votre requête LINQ, est l'ordre d'évaluation logique des éléments d'une requête. Et ça a du sens, de ce point de vue. On va dire : je récupère mes éléments, je les filtre, je les affiche. Vous voyez aussi que c'est quelque chose dont on n'a pas vraiment l'habitude, puisqu'on ne travaille pas, comme ici, avec des méthodes, spécifiquement, avec cette notation en points, mais on va vraiment exprimer ici une requête dans un langage purement déclaratif. On va déclarer ce qu'on veut obtenir et c'est le compilateur derrière qui va générer le code de boucle, par exemple. A la base, lorsque LINQ a été créé, cette syntaxe n'existait pas. Mais elle a été ajoutée après coup pour satisfaire les utilisateurs qui avaient un peu de peine à manipuler la syntaxe, comme celle-ci, qui est une syntaxe en forme d'appel de méthode. Mais c'est plutôt une bonne chose, c'est même une très bonne chose, parce que cette syntaxe est effectivement plus intuitive pour beaucoup de gens, et puis elle permet d'exprimer de façon élégante et très lisible quelque chose. Maintenant, elle ne permet pas tout. Là, je veux faire un count, et ici, comment est-ce que je fais un count ? Je ne peux pas faire un select count de s, par exemple. Ca n'existe pas. On peut essayer... Il n'y a pas particulièrement de fonction count de s et on va me dire, d'ailleurs : « de quoi s'agit-il ? » « C'est une méthode ? Eh bien, crée-la ! » Non, ce n'est pas une méthode, ici. Comment je vais faire ça ? Alors, ce que je peux faire, c'est, au lieu d'utiliser ici resultat, faire une variable intermédiaire, je vais l'appeler res, par exemple, et puis ensuite utiliser cette variable dont, vous vous souvenez, finalement, qu'elle contient un IEnumerable, et je vais pouvoir utiliser par dessus la méthode count, qui est donc une méthode LINQ. Ce que je peux faire également, - et je vais faire des Ctrl+Z pour annuler ce code - c'est, eh bien finalement, utiliser le résultat directement et aller chercher le count sans passer par une variable intermédiaire. Ici j'ai toujours du rouge, pourquoi ? Parce que mon count me retourne un entier et là, c'est toujours un string que je veux, donc bien entendu je refais mon ToString, et voilà l'équivalent de cet appel dans une syntaxe plutôt de requête LINQ.

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 !