2016-08-23 3 views
0

erhalte ich diesen Fehler konvertieren, wenn ich den folgenden Code setzen:kann nicht implizit Typ ‚System.Linq.IQueryable‘ auf ‚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)); 

Jede Idee, wie man es beheben ?

+0

Wenn Sie das Ergebnis von 'rec.Where' wissen ist vom Typ' IQueryable ', verwenden Sie eine explizite Umwandlung . Andernfalls verwenden Sie 'rec' nicht erneut, verwenden Sie eine neue' var' und arbeiten Sie stattdessen damit. – Orphid

+0

@Orphid, die Verwendung einer neuen var funktioniert wie erwartet. Vielen Dank! – Sam

Antwort

1

Die rec Variable :) Danke wird implizit als DbQuery<tblOrder> Objekt getippt (weil tblOrders ist ein DbQuery<tblOrder> Objekt und DbQuery<T>.AsNoTracking gibt ein Objekt des gleichen Typs).

Also, Ihre var Erklärung sieht aus wie das an den Compiler:

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

ist jedoch Where nur definiert, um ein IQueryable<T> Objekt zurück, das nicht notwendigerweise als DbQuery<tblOrder> Objekt passen.

Es sollte möglich sein, diese Probleme mit einer expliziten Typisierung des rec Variable zu vermeiden:

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

Danke. Ich wollte eine neue Var erstellen! Das ist besser! – Sam

Verwandte Themen