我正在使用实体框架 5 进行这样的查询:
var query =
from i in context.Instrument
from p in i.InstrumentPerformance // 1 : n
where p.PortfolioScenarioID == 6013
select i;
我想在内存中存储这个(过滤的)查询的可查询表示。理想情况下,我将能够断开上下文并仍然请求特定的 InstrumentPerformance 集合,如下所示:
var perf = query.First(i => i.InstrumentID == 407240).InstrumentPerformance;
但是这 - 当然 - 不会产生所需的结果,因为“perf”对象将包含一个 InstrumentPerformance 集合,该集合包含每个 1:n 加入的 InstrumentPerformance 实体(无论其 PortfolioScenarioID 是否为 6013),并且它将通过惰性检索这些实体加载,使用 context.ContextOptions.LazyLoadingEnabled = false (或上下文超出范围)查询将不会产生任何结果。
所以这远不是我想要得到的:从原始查询中轻松查询内存中的表示。我试图具体化成字典和类似的方法,但最终为我想避免的结果编码自定义数据对象。
所以我的问题是:获得这种内存视图的推荐方法是什么?
编辑:我目前正在使用两个字典来缓存数据,例如:
var instruments = (
from i in context.Instrument
from p in i.InstrumentPerformance
where p.PortfolioScenarioID == 6013
select i)
.ToDictionary (i => p.InstrumentID, i => i);
var performances = (
from i in context.Instrument
from p in i.InstrumentPerformance
where p.PortfolioScenarioID == 6013
select p)
.ToDictionary (p => p.InstrumentID, p => p);
但是,这需要两次往返数据库,其中一次似乎就足够了,更重要的是查询性能数据的语义(现在是 performances[InstrumentID])与 EF 查询方式(应该是 instrument.InstrumentPerformance.First( )等)。