代码之家  ›  专栏  ›  技术社区  ›  itchi

linq:将查询表达式转换为使用lambda

  •  1
  • itchi  · 技术社区  · 15 年前

    我正在尝试将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 回复  |  直到 15 年前
        1
  •  7
  •   Aaronaught    15 年前

    实际上应该是:

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

    记住,你想把 PERSON 到A TEACHER ,就这样 里面 代表。结果 School.Select(x => x.PERSON) 它本身就是一个 IEnumerable<PERSON> ,不可转换为 IEnumerable<TEACHER> .

    还有一件事-如果有的话 实例实际上不是 教师 S(即它们是 STUDENT 相反,你最终会 null 输出中的引用。如果 可以是多个类型,您可能希望这样写出来:

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

    这实际上会过滤掉所有 实体 不是 教师 S,所以你只能回去 教师 序列中的实例(没有空值)。

    还要注意, from x in y 语法是“查询”(特别是 查询理解语法 )。第二种形式是lambda语法。