Avez-vous un type par défaut que vous préférez utiliser dans vos transactions avec les résultats des requêtes LINQ? Par défaut, LINQ retournera un IEnumerable<>
ou peut-être un IOrderedEnumerable<>
. Nous avons trouvé qu'un List<>
est généralement plus utile pour nous, alors nous avons adopté l'habitude de ToList()
ing nos requêtes la plupart du temps, et certainement en utilisant List<>
dans nos arguments de fonction et les valeurs de retour.Avez-vous ToList()?
La seule exception à cela a été dans LINQ to SQL où l'appel .ToList()
énumérerait prématurément le IEnumerable
.
Nous utilisons également intensivement WCF, le type de collection par défaut est System.Array
. Nous modifions toujours cette valeur à System.Collections.Generic.List
dans la boîte de dialogue Paramètres de référence du service dans VS2008 pour des raisons de cohérence avec le reste de notre base de code.
Que faites-vous?
D'accord que ToList évalue immédiatement. Nous pensons que dans LINQtoSQL cela aura probablement un impact sur les performances (surtout si nous enchaînons quelques expressions LINQ), mais quand nous serons en mémoire, tout impact sur les performances sera négligeable - et la cohérence pour les humains est plus important. –
Il existe des différences significatives au-delà des performances. En particulier, si quelque chose à propos de la requête (par exemple les données dans la source) change, alors l'exécution différée vous donnera une réponse différente. Parfois, c'est ce que vous voulez, parfois ce n'est pas le cas. –