Etude exploratoire de Linq - CoDE - de l'Université libre de Bruxelles
Etude exploratoire de Linq - CoDE - de l'Université libre de Bruxelles
Etude exploratoire de Linq - CoDE - de l'Université libre de Bruxelles
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
var r = etudiants.GroupBy(<br />
e => e.facultes,<br />
e => new { e.nom, e.matricule },<br />
(key, elements) => new {<br />
Cle = key,<br />
Nbr = elements.Count()} );<br />
Le premier paramètre est le critère <strong>de</strong> groupement, le second est le sélecteur d’éléments qui va<br />
jouer le rôle d’opérateur <strong>de</strong> projection embarqué. C’est ce paramètre qui va définir quelles valeurs<br />
seront gardées lors <strong>de</strong> l’affichage du résultat. Le troisième paramètre est le sélecteur <strong>de</strong> résultat qui<br />
permet <strong>de</strong> réaliser une projection non plus sur les éléments mais sur les groupes, ce qui est<br />
particulièrement intéressant lorsqu’on souhaite obtenir <strong>de</strong>s informations d’agrégation sur les<br />
résultats sans le détail <strong>de</strong> ceux-ci. Le résultat produit par le co<strong>de</strong> ci-<strong>de</strong>ssus fournira <strong>de</strong>s informations<br />
sur nombre d’étudiants inscrits dans chaque faculté. Un groupement similaire mais sans le sélecteur<br />
<strong>de</strong> résultat donnerait le nom et le matricule <strong>de</strong> chaque étudiant, ceux-ci étant groupés par faculté.<br />
3.2.4 Quantificateurs<br />
Les quantificateurs sont bien pratiques lorsqu’il s’agit <strong>de</strong> faire <strong>de</strong>s manipulations complexes sur les<br />
données. Les fameux « Pour tout » et « Il existe » sont d’ailleurs une légère entrave en Sql puisque<br />
les quantificateurs universels n’y sont pas définis [12]. <strong>Linq</strong> fournit trois opérateurs <strong>de</strong> quantifications<br />
Any, All et Contains. Le quantificateur Any retourne la valeur true si au moins un élément <strong>de</strong> la<br />
collection sur laquelle il est appelé répond favorablement à l’expression lambda qui lui est passée en<br />
paramètre. Si aucune expression ne lui est passée, il répond simplement à la question « Y a-t-il un<br />
élément dans la collection ? ». Le quantificateur All permet <strong>de</strong> vérifier que l’ensemble <strong>de</strong>s éléments<br />
d’une collection vérifient un prédicat ayant la forme d’une expression lambda. En réalité cet<br />
opérateur tente <strong>de</strong> vérifier qu’aucun élément <strong>de</strong> la collection ne vérifie pas le prédicat, ce qui signifie<br />
qu’il retournera toujours true sur une collection vi<strong>de</strong>. Le quantificateur Contains tente <strong>de</strong> vérifier si<br />
une collection contient un élément spécifique. En termes objets, n’oublions pas que <strong>de</strong>ux éléments<br />
seront jugés i<strong>de</strong>ntiques si et seulement si leurs références pointent toutes <strong>de</strong>ux vers le même objet.<br />
Il est néanmoins possible <strong>de</strong> fournir un comparateur personnalisé pour déterminer l’égalité <strong>de</strong> <strong>de</strong>ux<br />
objets sur base d’autres critères que leurs simples références.<br />
3.2.5 Conversion en énumérable<br />
Il s’agit ici d’un opérateur prenant en paramètre une séquence d’objets et cet opérateur retournera<br />
<strong>de</strong>s valeurs i<strong>de</strong>ntiques mais sous forme d’objets énumérables, c’est-à-dire implémentant l’interface<br />
IEnumerable. Comment s’y prend-il ? Très simplement, en utilisant un énumérable générique<br />
dans lequel il encapsule les données <strong>de</strong> chaque élément. Cet énumérable générique est en fait une<br />
collection assez pauvre puisque son seul but va être <strong>de</strong> fournir accès aux extensions <strong>de</strong> métho<strong>de</strong>s qui<br />
caractérisent les énumérables. Toute autre information sera superflue puisque supposée déjà être<br />
présente dans la collection à convertir. Notons qu’il existe d’autres opérateurs <strong>de</strong> conversion tels que<br />
ToList, ToArray et ToDictionnary qui peuvent être utiles pour convertir un résultat dans un format<br />
plus classique. L’opération <strong>de</strong> conversion en énumérable est fortement utilisé avec l’implémentation<br />
<strong>Linq</strong> to DataSet, ceci sera développé dans la section consacrée à cette implémentation.