Использование SqlQuery для получения IQueryable
есть ли что-то, что может вернуться IQueryable
для динамического sql-запроса в Entity Framework 6?
это то, что я использую сейчас, но это тянет все записи (как и ожидалось).
DbContext.Database.SqlQuery<T>("SELECT * FROM dbo.SomeDynamicView")
проблема в том, что SqlQuery
возвращает DbRawSqlQuery
что это IEnumerable
.
dbo.SomeDynamicView
- это представление базы данных, созданные во время выполнения.
2 ответов
нет, вы не можете сделать IQueryable
с SqlQuery
*, потому что IQueryable
делает строит строку SQL динамически на основе того, что выбрать и где фильтры, которые вы вставляете. Потому что в SqlQuery
вы предоставляете String Entity Framework не может генерировать эту динамическую строку.
ваши параметры либо динамически построить строку самостоятельно, чтобы передать в SqlQuery
и используйте его как IEnumerable
вместо IQueryable
или использовать DbSet
в своем DbContext
и делать более "нормальный" способ позволить entity framework построить запрос для вас.
* технически вы можете, позвонив AsQueryable() в результате, но это просто IEnumerable, притворяющийся IQueryable, он не дает вам никаких преимуществ использования "реального" IQueryable, как только получение необходимых строк с сервера.
мне пришлось вызвать хранимую процедуру, и это сработало для меня с помощью LINQ:
dbContext.Database.SqlQuery<Order>("GetListOrder").AsQueryable();