如何在LINQPad中保留查询结果供后续复用?类似Matlab工作区
在LINQPad中复用查询结果(类似Matlab工作区)
嘿,这个需求我太懂了!谁也不想反复等慢查询跑完对吧?LINQPad其实自带了类似Matlab工作区的变量持久化功能,刚好能解决你的问题,下面给你两种实用的方法:
方法一:用会话状态(Session State)临时保存
这个方法适合同窗口内复用变量,数据会保留到你关闭LINQPad窗口为止,操作超简单:
- 首先确保你的查询模式是「C# Statement(s)」或者「C# Program」(如果是默认的Expression模式,切换一下就行,在查询窗口顶部的下拉菜单里)。
- 第一次执行慢查询时,把结果存入
Session对象:// 只需要跑一次的慢查询 var booksFromPeter = /* 你的耗时LINQ查询代码 */; // 把结果存入会话 Session["PeterBooks"] = booksFromPeter; - 之后要复用的时候,直接从
Session里取出即可,不用再跑查询:// 从会话中获取缓存的图书数据 var cachedBooks = Session["PeterBooks"] as List<Book>; // 替换成你的实体类型 if (cachedBooks != null) { // 在这里放心操作cachedBooks就行,比如筛选、统计 var expensiveBooks = cachedBooks.Where(b => b.Price > 50).ToList(); expensiveBooks.Dump(); // LINQPad的Dump方法用来展示结果 }
方法二:用Util.Cache做持久化缓存
如果需要跨窗口甚至重启LINQPad后还能复用,那就用LINQPad内置的Util.Cache工具:
- 只需要一行代码,第一次执行时会跑查询并缓存结果,之后直接读取缓存:
// 缓存键"PeterBooks_Cache"要保证唯一,避免和其他缓存冲突 var booksFromPeter = Util.Cache(() => /* 你的耗时LINQ查询代码 */, "PeterBooks_Cache"); - 如果之后需要更新缓存(比如数据源变了),可以手动清除指定缓存:
Util.ClearCache("PeterBooks_Cache");
这两种方法我平时处理大数据查询的时候经常用,省了超多重复等待的时间,完全满足你的需求~
内容的提问来源于stack exchange,提问作者Alamakanambra
相关产品推荐
相关产品推荐

