【问题标题】:Running queries on already fetched data from database in Linqpad (cache needed)对已从 Linqpad 中的数据库获取的数据运行查询(需要缓存)
【发布时间】:2020-09-16 09:44:36
【问题描述】:

我在 Linqpad 中执行了一个长时间运行的查询,以从我的数据库中获取一些数据。然后我需要分析这些数据。问题是我不想每次更改分析查询时都获取数据。

将数据存储在缓存之类的地方并且仍然具有用于分析的 Linq 功能的最简单方法是什么? LinqPad 是否为此目的提供任何东西? 我知道它可以导出为 csv 或 xml 文件,但需要更方便的东西。

【问题讨论】:

  • 听起来你想要的是一个 database :) 我建议用 SQL 编写你的查询并安排它在数据库上运行几个小时到一个临时表?否则,您可以使用本地数据库,尽管 LINQPad 确实(有点)难以同时连接到两个不同的服务器。如果您在 LINQPad 5 中,CSV 驱动程序非常快,它会缓存 CSV,因此您可以运行和编辑查询而无需重新读取 CSV,除非您按 CTRL-F5 卸载查询。

标签: sql linqpad


【解决方案1】:

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+, 调出搜索对话框,单击 Search Samples 并搜索“缓存”。

如果需要,您可以通过查询菜单上的选项(Ctrl+Shift+F5)杀死进程来清除缓存。

【讨论】:

  • 正是我需要的
猜你喜欢
  • 1970-01-01
  • 2016-07-03
  • 2019-07-03
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
相关资源
最近更新 更多