Są chwile, kiedy wykonywanie ToList()
zapytań linq może być ważne, aby zapewnić wykonanie zapytań w czasie i w kolejności, w jakiej się spodziewają. Te scenariusze są jednak rzadkie i nie należy się tym zbytnio przejmować, dopóki nie trafią na nie.
Krótko mówiąc, używaj IEnumerable
zawsze, gdy potrzebujesz tylko iteracji, używaj, IList
gdy potrzebujesz bezpośrednio indeksować i potrzebujesz tablicy o dynamicznym rozmiarze (jeśli potrzebujesz indeksowania na tablicy o stałym rozmiarze, po prostu użyj tablicy standardowej).
Jeśli chodzi o czas wykonania, zawsze możesz użyć listy jako IEnumerable
zmiennej, więc możesz zwrócić wartość IEnumerable
, wykonując a .ToList();
, lub przekazać parametr jako IEnumerable
wykonanie .ToList()
w IEnumerable
celu wymuszenia wykonania natychmiast i tam. Uważaj tylko, aby za każdym razem, gdy wymusisz wykonanie z .ToList()
tobą, nie trzymaj się IEnumerable
zmiennej, którą właśnie to zrobiłeś, i wykonaj ją ponownie, w przeciwnym razie skończy się to niepotrzebnym podwajaniem iteracji w zapytaniu LINQ.
Jeśli chodzi o MVC, naprawdę nie ma tu nic specjalnego do odnotowania. Będzie przestrzegać tych samych reguł czasu wykonania co reszta .NET, myślę, że możesz mieć kogoś, kto był trochę zamieszany spowodowany opóźnioną semantyką wykonania w przeszłości i obwiniał to MVC, mówiąc, że jest to w jakiś sposób powiązane, ale to jest nie. Opóźniona semantyka wykonania na początku wprowadza wszystkich w błąd (a nawet później przez dłuższy czas; mogą być trudne). Znów jednak, nie przejmuj się nim, dopóki naprawdę nie zależy ci na tym, aby zapytanie LINQ nie zostało wykonane dwukrotnie lub nie wymagało wykonania go w określonej kolejności względem innego kodu, w którym to momencie przypisz zmienną do siebie. żeby wymusić egzekucję, a wszystko będzie dobrze.