LINQ:将查询表达式转换为使用lambdas

时间:2010-03-12 01:42:03

标签: c# linq lambda

我正在尝试将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()吗?

1 个答案:

答案 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语法。