Использование 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();