Я хочу получить результат IQueryable<>
при выполнении хранимой процедуры.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);
То, что я хочу do - использовать некоторые хранимые процедуры в глобальном фильтре.
Я пробовал:
Добавить хранимую процедуру m_Entities
, но она возвращает IEnumerable<>
и сразу выполняет зр:
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()
.
Это EF 4? Если это так, используйте 'ExecuteStoreQuery', и тогда вам не понадобится' Materialize'. –
Нет, это EF 1, но если 'ExecuteStoreQuery' решает мою проблему, я рассмотрю переход на EF4. Можете ли вы поделиться ссылками на некоторые специальные статьи об этом (если они есть). –
Я видел http: // stackoverflow.com/questions/2201369/entity-framework-objectcontext-executestorequery-производит-отсоединенные объекты, и указано, что 'ExecuteStoreQuery' возвращает коллекцию ObjectResult', такую же, как' m_Entities.SomeEntitiyStoredProcedure (1234); '. Похоже, что 'ExecuteStoreQuery' не решит мою проблему. –