无法隐式转换类型System.Linq.IQueryable' to' System.Data.Entity.Infrastructure.DbQuery'

时间:2016-08-23 05:56:32

标签: c# linq .net-4.5

当我输入以下代码时收到此错误:

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));

知道怎么解决吗?

谢谢:)

1 个答案:

答案 0 :(得分:2)

rec变量隐式输入为DbQuery<tblOrder>个对象(因为tblOrdersDbQuery<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);