Jusqu'à présent, nous n'avons pas fait usage du mode de requêtes Linq. Pour cela, via la directive « using », nous allons donc inclure l'espace de nom suivant : « System.Linq ». Je vous propose de découvrir les différentes façons de formuler la demande effectuée au chapitre précédent :
IEnumerable<IEnumerable<float>> t = ComplementEnumerable.Select<EleveENT, IEnumerable<float>>(l,
delegate(EleveENT c)
{
return ComplementEnumerable.Select<NoteENT, float>(ComplementEnumerable.Where<NoteENT>(c.Notes,
delegate(NoteENT n)
{ return n.Date >= new DateTime(2007,4,1); }
), delegate(NoteENT n)
{ return n.Note; }
);
});
var r = ComplementEnumerable.Select(l, c =>
ComplementEnumerable.Select(ComplementEnumerable.Where(c.Notes, n =>
n.Date >= new DateTime(2007,4,1)), f => f.Note)
);
var h = l.Select(c => c.Notes.Where(n => n.Date >= new DateTime(2007,4,1)).Select(f => f.Note));
var p = from w in l select w.Notes.Where(n => n.Date >= new DateTime(2007,4,1)).Select(f => f.Note);
var z = (from k in l select (from q in k.Notes where q.Date >= new DateTime(2007,4,1) select q.Note));
On peut se poser plusieurs questions. La première est : Les résultats obtenus pour chacune des formulations sont-ils identiques ? La réponse est évidemment affirmative. Vous pouvez le vérifier grâce à la console. La deuxième question est : Ces syntaxes sont-elles véritablement équivalentes pour le code généré ? L'analyse de l'IL via le désassembleur va nous permettre de répondre. En effet, pour les cinq syntaxes ci-dessus, le code IL est identique.