将LINQ转换为不包含的实体stement到Lambda表达式

时间:2011-12-18 02:43:42

标签: lambda linq-to-entities

我有三个实体,如下所示。

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表达式。

2 个答案:

答案 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)
);

编辑:这假设您没有从学生到父母的链接;如果你这样做,请使用它而不是连接,以提高可读性。