问题描述
我在Linqpad中执行了长时间运行的查询,以从数据库中获取一些数据。然后,我需要分析这些数据。问题是我不想每次更改分析查询时都获取数据。
最简单的方法是将数据存储在高速缓存之类的地方并且仍然具有Linq功能进行分析? LinqPad是否为此目的提供任何东西? 我知道它可以导出为csv或xml文件,但需要更方便的方法。
解决方法
LINQPad提供了Cache
扩展方法和Util.Cache
方法,用于在两次运行之间将数据缓存在内存中。 Cache
扩展方法适用于IEnumerable<T>
,而Util.Cache
方法适用于任何类型。
以下是使用Cache
扩展方法的方法:
var customers = Customers.Cache(); // Slow only on the first execution
customers.Where (c => c.Name == "Joe").Dump();
运行查询后,将第二行更改为以下内容:
customers.Where (c => c.Name == "Mary").Dump();
当您重新执行查询时,LINQPad将不会从数据库中获取任何内容,因为customers
将从第一次运行开始就已缓存在内存中。
您还可以缓存数据的子集:
var localCustomers = Customers.Where (c => c.Country == "US").Cache();
localCustomers.Where (c => c.Name == "Mary").Dump();
LINQPad的内置教程和参考中有更多示例。按Ctrl +,打开搜索对话框,单击搜索样本,然后搜索“缓存”。
如果需要,可以通过查询菜单上的选项(Ctrl + Shift + F5)取消进程,从而清除缓存。