La navigation avec Linq dans des objets multidimension

Une petite astuce d’utilisation de Linq. On a l’habitude de travailler avec linq sur des listes monodimensions (List<Truc>, etc…) :

Par exemple pour récupérer l’ensemble des épisodes non vu d’une saison.

var episodes=from episode in Season.Episodes where episode.HasBeenSeen select episode;

Imaginons maintenant que nous aillons la structure suivante :

Classiquement, on va parcourir chaque saison et écrire une requête semblable à la précédente ou comme je viens de le voir dans un code, faire un concat sur la liste des épisodes de chaque saison pour ensuite parcourir la liste… No comment…

Linq permet ce genre de navigation nativement et simplement pourtant en utilisant plusieur fois le couple « from… in » :

 

var episodes=from season in TVShow.Seasons from episode in season.Episodes where episode.HasBeenSeen select episode;

 
Pas intuitif, mais vraiment pratique !