.FromCache()在结果集上使用时IQueryable,我应该另外调用.ToList(),还是可以只IEnumerable<>使用FromCache返回物化查询返回的结果?
2 回答
我假设您使用的是来自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.