我正在尝试将LINQ To Entities查询重写为表达式.我的模特是一所可以有很多人的学校.人员继承给教师,学生等.
以下查询适用于我:
IQueryable<DAL.TEACHER> teacher =
from p in School
select p.PERSON as ESBDAL.TEACHER;
Run Code Online (Sandbox Code Playgroud)
我如何将其写为查询表达式?我想的是:
IQueryable<DAL.TEACHER> teacher =
School.Select(x=>x.PERSON) as IQueryable<DAL.TEACHER>;
Run Code Online (Sandbox Code Playgroud)
不幸的是,这种说法不起作用.我误会了.Select()
吗?
它应该是:
School.Select(x => x.PERSON as DAL.TEACHER)
Run Code Online (Sandbox Code Playgroud)
记住,你正在尝试将其转换PERSON
为a TEACHER
,因此它会进入委托.结果School.Select(x => x.PERSON)
本身实际上是一个IEnumerable<PERSON>
,不可转换为IEnumerable<TEACHER>
.
还有一件事 - 如果某些PERSON
实例实际上并不是TEACHER
s(即它们是STUDENT
s代替),那么你最终会null
得到输出中的引用.如果PERSON
可以有多种类型,您可能希望将其写为:
School.Select(x => x.PERSON).OfType<DAL.TEACHER>();
Run Code Online (Sandbox Code Playgroud)
这实际上会过滤掉所有非 s 的PERSON
实体,因此您只能获取序列中的实例(无空值). TEACHER
TEACHER
另请注意,from x in y
语法是"查询"(特别是查询理解语法).第二种形式是lambda语法.
归档时间: |
|
查看次数: |
156 次 |
最近记录: |