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