J'ai déjà vu cette question posée ici, mais je ne suis pas certain d'en comprendre toutes les ramifications. Le problème est de savoir quel type de retour doit avoir une couche de données qui utilise linq-to-sql pour un maximum de flexibilité et de capacité d'interrogation. Voici ce que j'ai lu/trouvé :
-
IEnumerable est limité et ne permet que des opérations de lecture directe. IEnumerable est le plus générique. Ce que j'ai découvert, c'est que IEnumerable permet des opérations d'interrogation par rapport à la syntaxe d'extension.
-
La liste offre la plus grande flexibilité grâce aux opérations d'insertion.
-
Les collections doivent être utilisées à la place des listes pour permettre des collections en lecture seule.
-
IQueryable ne doit jamais être utilisé, il doit être "utilisé et désactivé". IQueryable ne renvoie pas de liste mais génère une syntaxe de requête pour la base de données.
J'ai l'impression d'avoir une meilleure perception des compromis, mais je ne suis pas encore sûr de certaines choses :
-
Pourquoi choisirais-je les variantes d'interface plutôt que les types concrets ? Par exemple, IList ou ICollection par rapport à List ou Collection. Quel avantage en tirerais-je ?
-
Je vois que les opérations d'extension fonctionnent, mais la syntaxe de requête étendue fonctionnera-t-elle également ?
-
Quelqu'un m'a déjà suggéré d'utiliser AsQueryable(). Mais pourquoi ferais-je cela si je n'ai pas de connexion à la base de données ? Il semble que les méthodes d'extension fonctionnent de toute façon.