2010-03-12 2 views
1

LINQ To 엔터티 쿼리를 식에 다시 쓰려고합니다. 내 모델은 많은 인물을 가질 수있는 학교입니다. 사람은LINQ : 람다를 사용하도록 쿼리 식 변환

다음 쿼리는 나를 위해 작동 등, 교사, 학생에게 상속됩니다

IQueryable<DAL.TEACHER> teacher = 
from p in School 
select p.PERSON as ESBDAL.TEACHER; 

이 어떻게 쿼리 식으로 이것을 작성합니다 ? 나는 다음과 같이 생각했다 :

IQueryable<DAL.TEACHER> teacher = 
School.Select(x=>x.PERSON) as IQueryable<DAL.TEACHER>; 

불행히도이 문장은 작동하지 않는다. .Select()을 오해하고 있습니까?

+0

청소 해 주셔서 감사합니다. – itchi

답변

7

실제로해야한다 :

School.Select(x => x.PERSON as DAL.TEACHER) 

그것이 내부의 대리자를 간다, 그래서 당신은 TEACHERPERSON을 캐스팅하기 위해 노력하고, 기억하십시오. School.Select(x => x.PERSON)의 결과는 실제로 IEnumerable<PERSON>이며 IEnumerable<TEACHER>으로 변환 할 수 없습니다.

한가지 더 - 일부 PERSON 인스턴스가 실제로 TEACHER들 (그들은 대신 STUDENT의이 즉) 인 경우에, 당신은 출력에 null 참조로 끝날 것입니다.

School.Select(x => x.PERSON).OfType<DAL.TEACHER>(); 

이 실제로 TEACHER의하지 않은 PERSON 모든 법인을 필터링하므로 전용 : PERSON 더 한 종류 이상이 될 수 있다면, 당신은 아마이 대신처럼을 기록 할 것 순서 (null이 아님)의 TEACHER 인스턴스를 다시 가져옵니다.

from x in y 구문은 "쿼리"입니다 (특히 쿼리 이해 구문). 두 번째 형식은 람다 구문입니다.

+1

위대한 답변, 고마워! – itchi