Я хочу получить IQueryable<>
результат при выполнении хранимой процедуры.
Вот фрагмент кода, который отлично работает:
IQueryable<SomeEntitiy> someEntities;
var globbalyFilteredSomeEntities =
from se in m_Entities.SomeEntitiy
where
se.GlobalFilter == 1234
select se;
Я могу использовать это, чтобы применить глобальный фильтр, а затем использовать результат в следующем виде:
result = globbalyFilteredSomeEntities
.OrderByDescending(se => se.CreationDate)
.Skip(500)
.Take(10);
Что я хочу сделать - использовать некоторые хранимые процедуры в глобальном фильтре.
Я попробовал:
Добавить хранимую процедуру к m_Entities
, но она возвращает IEnumerable<>
и немедленно выполняет sp:
var globbalyFilteredSomeEntities =
from se in m_Entities.SomeEntitiyStoredProcedure(1234);
Материализовать запрос с использованием библиотеки EFExtensions, но это IEnumerable<>
.
Если я использую AsQueryable()
и OrderBy()
, Skip()
, Take()
и после этого ToList()
выполнить этот запрос -
Я получаю исключение, что DataReader
открыто, и мне нужно сначала закрыть его (не могу вставить ошибку - это на русском языке).
var globbalyFilteredSomeEntities =
m_Entities.CreateStoreCommand("exec SomeEntitiyStoredProcedure(1234)")
.Materialize<SomeEntitiy>();
//.AsQueryable()
//.OrderByDescending(se => se.CreationDate)
//.Skip(500)
//.Take(10)
//.ToList();
Также просто пропуск .AsQueryable()
не полезен - то же исключение.
Когда я ставлю ToList()
запрос выполняется,
но выполнение запроса слишком дорого без Skip()
, Take()
.