Cannot implicitly convert type 'System.Linq.IQueryable&#

本文关键字:System Linq IQueryable implicitly convert type Cannot | 更新日期: 2023-09-27 18:03:27

当我输入以下代码时,我收到这个错误:

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

有什么好办法吗?

谢谢:)

Cannot implicitly convert type 'System.Linq.IQueryable&#

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