2016-08-23 5 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