При использовании .FromCache()
в наборе результатов IQueryable
, должен ли я дополнительно позвонить .ToList()
, или я могу просто вернуть IEnumerable<>
, возвращенный материализованным запросом с помощью FromCache?LINQ .FromCache(). ToList()?
ответ
Я предполагаю, что вы используете производную от кода от http://petemontgomery.wordpress.com/2008/08/07/caching-the-results-of-linq-queries/. Если вы посмотрите на реализацию FromCache
, вы увидите, что уже вызывается query.ToList()
. Это означает, что оцененный список - это то, что кэшируется. Так,
Вам не нужно звонить ToList()
Это зависит полностью от того, что вы хотите с этим сделать. Если вы просто собираетесь на foreach
над ним один раз, то вы можете просто оставить его как IEnumerable
. Нет необходимости составлять список, чтобы сразу отказаться от него.
Если вы планируете перебирать его несколько раз, то это, вероятно, лучше всего для ToList
, так что вы не имеете доступа к базовому IQueryable
несколько раз. Вы также должны указать ToList
, если возможно, что базовый запрос будет меняться со временем, и вы не хотите, чтобы эти изменения отражались в вашем запросе.
Если вам не нужно перебирать все элементы (вы можете остановиться после первого элемента или на полпути или что-то в этом роде), то, вероятно, лучше оставить его как IEnumerable
, чтобы потенциально избежать даже извлекая некоторый объем данных в первую очередь.
Если метод не имеет представления о том, как он будет использоваться, и это просто вспомогательный метод, который будет использоваться еще не написанным кодом, а затем подумайте о возврате IEnumerable
. Вызывающий может вызвать ToList
, если у них есть веская причина превратить его в список.
Для меня, как правило, я оставляю такие запросы, как IEnumerable
, если у меня нет веской причины сделать его List
.
- 1. ToList в Linq
- 2. Linq ToList() исполнение
- 3. Ruby-эквивалент LINQ ToList()
- 4. Linq ToList странное поведение
- 5. LINQ ошибка с ToList
- 6. Ошибка сериализации LINQ ToList()?
- 7. Linq ToList ничего не делает
- 8. C# Как пройти Linq ToList()
- 9. Оператор Linq-To-SQL .ToList()
- 10. Положите Linq .ToList() в datatable
- 11. Linq ToList/ToArray/ToDictionary performance
- 12. split + substring + tolist C# Linq
- 13. EF LINQ ToList очень медленный
- 14. Linq Query ToList() Acting Up
- 15. linq to sql Значение метода ToList()
- 16. Как преобразовать метод ToList в выражение LINQ
- 17. Повышение производительности запросов Linq, которые используют ToList()
- 18. SqlQuerry ToList() работает, но Linq (Iqueryable) нет?
- 19. Linq запрос бросает System.StackOverflowException на .tolist()
- 20. ToList() после того, как Select() в LINQ
- 21. Linq ToList() не запускает немедленное выполнение
- 22. Метод ToList(), используя Single() linq query
- 23. LINQ очень медленно, когда делает .toList()
- 24. Linq с DataTable .ToList() очень медленно
- 25. LINQ запрос не работает без .ToList()
- 26. Linq запросов ToList() пусто, но Еогеасп работает
- 27. Странное поведение LINQ - ToList возвращает пустой набор
- 28. вопрос о выборе linq и ToList()
- 29. Linq как расширить \ переопределить существующий метод toList()
- 30. Linq-to-Sql Sproc - ToList() слишком медленный
Да, я использую, что 'реализация .FromCache'. –