Langage C# / Entity Framework – Différences entre les interfaces IQueryable<​T> et IEnumerable<​T>

Pour accéder aux données avec le Framework Entity, le Framework .NET vous propose deux interfaces génériques : IQueryable et IEnumerable. En fonction de l’interface que vous utilisez, les données obtenues dans le contexte de données diffèrent.

Dans les exemples ci-dessous, la table Formation dans la base de données contient 20 formations. Seules 12 de ces formations ont une durée supérieure à 3 jours.

Interface IEnumerable
Lors de l’utilisation de l’interface IEnumerable, toutes les formations sont rapatriées dans le contexte de données oFormationEntities depuis la base de données, puis les données sont filtrées pour obtenir la liste oListe :

FormationEntities oFormationEntities = new FormationEntities();
IEnumerable<Formation> oReq = from o in new FormationEntities().Formation
                              select o;
List<Formation> oListe = oReq.Where(o => o.NombreJours > 3).ToList();

Le contexte de données oFormationEntities contient 20 formations et oListe en contient 12 de ces formations.

Interface IQueryable
Lors de l’utilisation de l’interface IQueryable, seules les formations correspondant au filtre défini dans l’expression lambda de la méthode Where sont rapatriées dans le contexte de données oFormationEntities depuis la base de données, puis utilisées pour alimenter la liste oListe :

FormationEntities oFormationEntities = new FormationEntities();
IQueryable<Formation> oReq = from o in new FormationEntities().Formation
                             select o;
List<Formation> oListe = oReq.Where(o => o.NombreJours > 3).ToList();

Le contexte de données oFormationEntities contient 12 formations et oListe en contient ces 12 formations.

About: James RAVAILLE

Travaillant avec la plateforme Microsoft .NET depuis 2002, j’alterne les missions de formation et d’ingénierie avec cette plateforme. J’écris ce blog pour transmettre mes connaissances à tout développeur, qu’il soit débutant ou expérimenté.