对Linqpad中已从数据库中提取的数据运行查询需要缓存

问题描述

我在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)取消进程,从而清除缓存。