2010-03-12 45 views
1

我試圖重寫一個LINQ to Entities查詢到表達式。我的模特兒是一個可以有很多人的學校。人繼承了教師,學生等LINQ:將查詢表達式轉換爲使用lambdas

下面的查詢工作對我來說:

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 2010-03-12 17:43:30

回答

7

它實際上應該是:

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

記住,你試圖將PERSON轉換爲TEACHER,如此這般委託。 School.Select(x => x.PERSON)本身的結果實際上是IEnumerable<PERSON>,它不能轉換爲IEnumerable<TEACHER>

一兩件事 - 如果一些PERSON情況下,實際上不是TEACHER秒(即它們是STUDENT!而非),你要與輸出null引用結束。如果PERSON可不止一種類型的,你可能會想要寫出來是這樣,而不是:

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

這實際上將過濾掉所有PERSON實體TEACHER S的,所以只有你在序列中返回TEACHER實例(無空值)。

另請注意,from x in y語法是「查詢」(具體爲查詢理解語法)。第二種形式是lambda語法。

+1

很好的答案,非常感謝! – itchi 2010-03-12 01:52:47