2016-08-23 7 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'を再利用せず、新しい' var'を使い、その代わりにそれを使ってください。 – Orphid

+0

@Orphid、新しいvarを使用して期待どおりに動作します。ありがとう! – Sam

答えて

1

rec変数(tblOrdersDbQuery<tblOrder>オブジェクトであり、DbQuery<T>.AsNoTrackingは、同じタイプのオブジェクトを返すため)DbQuery<tblOrder>オブジェクトとして暗黙に型付けされます。

だから、あなたのvar宣言は、コンパイラにそのようになっています

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

しかし、Whereのみを必ずしもDbQuery<tblOrder>オブジェクトとして適合しないIQueryable<T>オブジェクトを返すように定義されています。

rec変数の明示的な型で、これらの問題を回避することが可能でなければなりません:明示的なキャストを使用して、あなたは `rec.Where`が型である` `のIQueryable の結果を知っている場合

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

ありがとうございます。私は新しいvarを作成しようとしていた!これの方が良い! – Sam

関連する問題