LINQ .FromCache()。ToList()?

时间:2012-09-11 14:49:15

标签: c# linq caching ienumerable ilist

.FromCache()结果集上使用IQueryable时,是否应该另外调用.ToList(),还是可以使用FromCache返回具体化查询返回的IEnumerable<>?< / p>

2 个答案:

答案 0 :(得分:2)

我假设您正在使用http://petemontgomery.wordpress.com/2008/08/07/caching-the-results-of-linq-queries/代码的衍生物。如果您查看FromCache实施,您会看到query.ToList()已被调用。这意味着评估列表是缓存的。所以,

您无需致电ToList()

答案 1 :(得分:1)

这完全取决于你想用它做什么。如果您只是foreach过一次,那么您可以将其保留为IEnumerable。没有必要建立一个列表只是为了立即丢弃它。

如果您计划多次迭代它,最好ToList它,这样您就不会多次访问基础IQueryable。如果基础查询可能会随着时间的推移而发生变化,并且您不希望这些更改反映在您的查询中,那么您还应该ToList

如果您可能不需要迭代所有项目(最终可能会在第一项之后,或中途停止,或类似之类),那么最好将其保留为IEnumerable甚至可以避免在第一时间获取一些数据。

如果方法不知道它将如何使用,并且它只是一个将由尚未编写的代码使用的辅助方法,那么请考虑返回IEnumerable。如果呼叫者有令人信服的理由将其变为列表,则可以呼叫ToList

对我来说,作为一般规则,我会留下IEnumerable这样的问题,除非我有一些令人信服的理由将其设为List