Бувають ToList()важливі випадки, коли виконання ваших запитів linq може бути важливим, щоб забезпечити виконання ваших запитів у той час і в тому порядку, в якому ви їх очікуєте. Ці сценарії, однак, рідкісні, і ні про кого не варто занадто хвилюватися, поки вони справді не натрапляють на них.
Коротше кажучи, використовуйте в IEnumerableбудь-який час, IListколи вам потрібна лише ітерація, використовуйте, коли вам потрібно індексувати безпосередньо та потрібен масив динамічного розміру (якщо вам потрібна індексація на масиві фіксованого розміру, тоді просто використовуйте стандартний масив).
Що стосується часу виконання, ви завжди можете використовувати список як IEnumerableзмінну, тому сміливо повертайте команду IEnumerablea .ToList();, або передаючи параметр у вигляді IEnumerableвиконання, виконуючи .ToList()на виконання IEnumerableта примусового виконання виконання. Будьте обережні, що в будь-який момент, коли ви змушуєте виконувати з .ToList()вами виконання, ви не будете зациклюватися на IEnumerableзмінній, яку ви тільки що зробили для цього, і виконати її знову, інакше ви в кінцевому підсумку подвійно повторите ітерації в запиті LINQ.
Що стосується MVC, то тут немає нічого особливого для зауваження. Це дотримуватиметься тих самих правил часу виконання, що і решта .NET, я думаю, у вас може виникнути хтось, хто був розгублений, викликаний семантикою затримки виконання в минулому, і звинувачував це в MVC, кажучи вам, що це якось пов'язано, але це ні. Семантика затримки виконання спочатку всіх бентежить (і навіть надовго; потім вони можуть бути хитрими). Знову ж таки, просто не хвилюйтеся з цього приводу, поки ви дійсно не потурбуєтеся про те, щоб запит LINQ не виконувався двічі або не вимагав його виконувати в певному порядку відносно іншого коду, після чого призначте свою змінну собі.ToList () щоб примусити стратити, і ти будеш добре.