2016-08-23 126 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,使用一個新的變種按預期工作。謝謝! – Sam

回答

1

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

謝謝。我打算創建一個新的變種!這個更好! – Sam

相關問題