2016-08-23 8 views
0

Я получаю эту ошибку, когда я поставил следующий код:Не может неявно преобразовать тип «System.Linq.IQueryable» до «System.Data.Entity.Infrastructure.DbQuery»

var rec = (bNoTracking ? tblOrders.AsNoTracking() : tblOrders); 
... 
... 
... 
//error on next line: Cannot implicitly convert type 'System.Linq.IQueryable<LocalDB.tblOrder>' to 'System.Data.Entity.Infrastructure.DbQuery<LocalDB.tblOrder>'. An explicit conversion exists (are you missing a cast?) 
rec = rec.Where(x => (x.WarehouseId == iWarehouseId) && (x.OrderId == iOrderId)); 

Любая идея, как это исправить ?

спасибо :)

+0

Если вы знаете результат 'rec.Where' имеет тип' 'IQueryable , использовать явное приведение , В противном случае не используйте повторно 'rec', используйте новый' var' и работайте с ним. – Orphid

+0

@Orphid, используя новый var работает как и ожидалось. Благодаря! – Sam

ответ

1

Переменная rec набирается неявно как DbQuery<tblOrder> объекта (потому что tblOrders является объектом DbQuery<tblOrder> и DbQuery<T>.AsNoTracking возвращает объект того же типа).

Итак, ваше var заявление выглядит, что компилятор:

DbQuery<tblOrder> rec = (bNoTracking ? tblOrders.AsNoTracking() : tblOrders); 

Однако Where определяется только вернуть IQueryable<T> объект, который не обязательно соответствовать как DbQuery<tblOrder> объекта.

Должна быть обеспечена возможность избежать этих проблем, с явной типизации rec переменной:

IQueryable<tblOrder> rec = (bNoTracking ? tblOrders.AsNoTracking() : tblOrders); 
+0

Спасибо. Я собирался создать новый var! Это лучше! – Sam