Материализовать запрос структуры объекта
Я использую Entity Framework 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;
Но это, конечно, не дает желаемого результата, так какперфорация» Объект будет содержать коллекцию InstrumentPerformance, которая содержит каждую присоединенную сущность InstrumentPerformance 1: n (независимо от того, является ли ее идентификатор 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);
Тем не менее, для этого требуются два обращения к базе данных, причем одна из них кажется достаточной, и, что более важно, семантика для запроса данных о производительности (которая теперь является производительностью [InstrumentID]) не согласуется с способом запроса EF (который должен быть instrument.InstrumentPerformance.First ( ) и тому подобное).