12.07.2013 Views

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

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!