EF6 LinQ - 选择匹配表达式的后代

时间:2018-05-28 07:39:35

标签: entity-framework linq

我想通过一个表达式过滤学校的后代。这可能吗?我只想要年龄为“12”的学生

伪代码

context.Schools.Where(s => s.Name = "Springfield Elementary").Where(s => 
s.Pupils.Age == 12).Select(s);

基本上我想要一个学校集合,其中包含一个与我的表达相匹配的学生集合

谢谢!

1 个答案:

答案 0 :(得分:1)

context.Schools.Where(s => s.Name == "Springfield Elementary" && s.Pupils.Age == 12);

它不应该是.Select(s)学校的必需品,因为那就是你所要求的。

这将返回学生年龄为12岁的学校。 但如果你想选择学生,你需要:

context.Schools
.Where(s => s.Name == "Springfield Elementary" && s.Pupils.Age == 12)
.Select(s=>s.Pupils);

或者正如通过查询学生的评论建议

context.Pupils.Where(s => s.Age == 12 && s.School.Name == "Springfield Elementary");

这假设Schools / Pupil看起来像这样(代码优先的POCO):

public class School
{ 
    public int SchoolId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Pupil> Pupils { get; set; }
}

public class Pupil
{ 
    public int PupilId { get; set; }

    public int Age { get; set; }

    public int SchoolId { get; set; }
    public virtual School School { get; set; }
}