2013-02-10 1 views
0

로 된 IQueryable 변환 할 수 없습니다 나는 다음과 같은 코드가 있습니다내 C# 클래스에서 ObjectSet

var myData= Db.SetName; 
myData = myData.Where(p => p.Set2.Date >= start 
       && p.Set2.Date <= end); 

DB 내 DBOBJECT (또는 DbContext)

입니다하지만 난 다음 가져 오기 오류 :

Error:Cannot implicitly convert type 'System.Linq.IQueryable<SetName>' to 
'System.Data.Objects.ObjectSet<SetName>'. An explicit conversion exists 
(are you missing a cast?) 

어디에 문제가 있습니까?

+0

오류를 던지고있는'Where' 다음에 줄이 있습니까? 그렇다면 귀하의 질문에 그 라인을 포함하십시오. –

+0

아니요, 코드가 없다고 가정합니다. 자유롭게 느끼고 코멘트를 날려 버리십시오. –

+0

그래서'Where' 라인이 에러를 던지고 있습니다 - 컴파일 타임이나 런타임 에러입니까? –

답변

4

이 줄 :

var myData = Db.SetName; 

작성해 유형 ObjectSet<SetName>myData라는 변수를 할당합니다. 다음 줄 :

myData = myData.Where(p => p.Set2.Date >= start && p.Set2.Date <= end); 

는 ... 같은 변수 유형 IQueryable<SetName>의 값을 할당하려고 시도합니다. ObjectSet<SetName>IQueryable<SetName>을 구현하지만 Dog 유형의 변수에 IAnimal 값을 할당 할 수없는 것과 같은 이유로 이전 유형의 변수에 후자 유형의 값을 할당 할 수 없습니다.

기본 문제는 종류가 myData이 아니며 오류의 원인을 왜곡하기 때문에 var을 (종류) 사용하는 것입니다. 이 작업을해야합니다 :

IQueryable<SetName> myData = Db.SetName; 
myData = myData.Where(p => p.Set2.Date >= start && p.Set2.Date <= end); 

...이 정상적으로 :

var myData = (IQueryable<SetName>)Db.SetName; 
myData = myData.Where(p => p.Set2.Date >= start && p.Set2.Date <= end); 

... 모두가 해당 유형의 값으로 나중에 명시 적으로 myData 유형 IQueryable<SetName>의 것을 명시, 따라서 할당 할 수 있기 때문이다.

+0

스티브, 질문이 : 'var myData = (IQueryable ) Db.SetName;'myData는 데이터베이스의 전체'SetName' 레코드를 저장합니까? –

+0

모든 데이터베이스 레코드를 가져 오지는 않습니다. 모든 것은 컴파일러에게'myData'가'IQueryable '인터페이스의 구현을 통해'Db.SetName'을 사용할 것이라고 말합니다. –

2

myData을 한 유형으로 내재적으로 선언 한 후 그 값을 다른 유형에 지정하려고합니다. 대신이 작업을 수행합니다 :

var myData= Db.SetName.Where(p => p.Set2.Date >= start && p.Set2.Date <= end).AsQueryable();

+0

나는 이것을 안다. 하지만 나중에 Where 절에 의해 내 데이터에 필터를 추가하고 싶습니다. 내 페이지에 일부 텍스트 상자가 있고이 텍스트 상자를 기반으로 필터링하고 싶습니다. 다른 아이디어있어? –

+0

LINQ 쿼리는 모든 IEnumerable에서 작동하므로 쿼리를 제대로 수행 할 수 있어야합니다. 당신이 할 수 없다는 것을 확인 했습니까? –

+0

LINQ에서 같은 오류가 발생했습니다. –

0

나는 내 컴퓨터에없는 이니까 나는 '그것에 대해 확실하지 않다, 그러나 당신은 Where().AsQueriable()을 추가 할 수 있습니다 당신은 갈 수 있습니다.