Ci sono momenti in cui fare un ToList()
sulle query di linq può essere importante per garantire che le query vengano eseguite al momento e nell'ordine in cui ci si aspetta che lo facciano. Questi scenari sono tuttavia rari e non bisogna preoccuparsi troppo di nulla finché non li incontrano veramente.
Per farla breve, usa IEnumerable
ogni volta che hai bisogno dell'iterazione, usa IList
quando devi indicizzare direttamente e hai bisogno di un array di dimensioni dinamiche (se hai bisogno di indicizzazione su una matrice di dimensioni fisse, usa solo un array standard) .
Per quanto riguarda il tempo di esecuzione, puoi sempre usare un elenco come variabile IEnumerable
, quindi sentiti libero di restituire un IEnumerable
facendo un .ToList();
, o passa un parametro come IEnumerable
di eseguendo .ToList()
su IEnumerable
per forzare l'esecuzione giusto allora e lì. Fai attenzione che ogni volta che imposti l'esecuzione con .ToList()
non ti blocchi alla variabile IEnumerable
che hai appena fatto e l'esegui di nuovo, altrimenti finirai per raddoppiare le iterazioni nella tua query LINQ inutilmente .
Riguardo a MVC, non c'è davvero nulla di speciale da notare qui. Seguirà le stesse regole del tempo di esecuzione del resto di .NET, penso che potresti avere qualcuno che era un po 'confuso causato dalla semantica di esecuzione ritardata in passato e lo ha incolpato su MVC dicendoti che questo è in qualche modo correlato, ma è non. La semantica di esecuzione ritardata confonde tutti all'inizio (e anche per un po 'di tempo dopo, possono essere un po' complicati). Ancora una volta, però, non preoccuparti di ciò finché non ti preoccupi veramente di garantire che una query LINQ non venga eseguita due volte o richieda che venga eseguita in un certo ordine rispetto ad un altro codice, a quel punto assegna la tua variabile a se stessa.ToList () forzare l'esecuzione e starai bene.