我有三个实体,如下所示。
Student { StudentID, Name, Age }
Parent { ParentID, Name, Age }
StudentParent { StudentParentID, StudentID, ParentID }
我需要获得一个IQueryable列表,其中包含一定年龄且没有父母的学生。我目前正在使用以下代码,它可以正常工作。
IQueryable<Student> Student s = from s in db.Students
where s.Age == 18
where !(from sp in db.StudentParent where sp.StudentID == s.StudentID select sp.StudentID).Contains(s.StudentID)
select s;
我想帮助将其转换为Lambda表达式。
答案 0 :(得分:4)
您应该在实体模型中创建关联。
然后你可以写
db.Students.Where(s => s.Age == 18 && s.Parents.Count == 0)
使用ORM时,您永远不需要显式查询连接表(例如StudentParent
)。
答案 1 :(得分:2)
这应该有效:
db.Students.Where( s =>
s.Age == 18 && db.StudentParent.All(sp => sp.StudentID != s.StudentID)
);
编辑:这假设您没有从学生到父母的链接;如果你这样做,请使用它而不是连接,以提高可读性。