我正在尝试将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()
吗?
答案 0 :(得分:7)
实际应该是:
School.Select(x => x.PERSON as DAL.TEACHER)
请记住,您正在尝试将PERSON
转换为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>();
这实际上会过滤掉不是 PERSON
的所有TEACHER
实体,因此您只能在序列中找回TEACHER
个实例(没有空的)。
另请注意,from x in y
语法是“查询”(特别是查询理解语法)。第二种形式是lambda语法。