Бывают случаи, когда выполнение ToList()
запросов в linq может быть важным для обеспечения выполнения ваших запросов в то время и в том порядке, в котором вы ожидаете их выполнить. Эти сценарии, однако, редки, и никто не должен слишком беспокоиться о них, пока они действительно не столкнутся с ними.
Короче говоря, используйте в IEnumerable
любое время, IList
когда вам нужна только итерация, используйте, когда вам нужно напрямую индексировать и вам нужен массив с динамическим размером (если вам нужна индексация для массива с фиксированным размером, просто используйте стандартный массив).
Что же касается времени выполнения вещь, вы всегда можете использовать список в качестве IEnumerable
переменной, так что не стесняйтесь возвращать IEnumerable
посредством производства .ToList();
, или передать в качестве параметра как IEnumerable
путем выполнения .ToList()
на IEnumerable
в силу исполнения прямо тогда и там. Просто будьте осторожны, чтобы каждый раз, когда вы принудительно .ToList()
выполняли выполнение, не зависали от IEnumerable
переменной, которую вы только что сделали, и выполняли ее снова, иначе вы в итоге удвоите количество итераций в своем запросе LINQ.
Что касается MVC, то здесь особо отмечать нечего. Он будет следовать тем же правилам времени выполнения, что и остальная часть .NET, я думаю, что у вас может быть кто-то, кто был немного смущен, вызванным семантикой отложенного выполнения в прошлом, и обвинил его в том, что MVC говорит, что это как-то связано, но это не. Семантика отложенного выполнения сначала смущает всех (и даже на некоторое время потом; они могут быть довольно сложными). Опять же, просто не беспокойтесь об этом, пока вы действительно не позаботитесь о том, чтобы запрос LINQ не выполнялся дважды или не требовал, чтобы он выполнялся в определенном порядке относительно другого кода, после чего назначьте вашу переменную себе. ToList () форсировать исполнение, и все будет в порядке.