2011-12-16 45 views
1

当我查询:查询上继承了实体框架类不起作用

Users.OfType<Student>().Where(u => u.StudentClasses.Any(sc => sc.Class.TermId == 1 && sc.Class.SubFormId == 1)) 

我什么也没得到。但此查询返回true:

StudentClasses.Any(sc => sc.Class.TermId == 1 && sc.Class.SubFormId == 1) 

所以基本上这是一样的:

Users.OfType<Student>().Where(u => true) 

它返回所有的学生。所以OfType<Student>的作品。

我100%确定这些班级中有学生StudentClasses,但由于某种原因,我没有回到学生,尽管子查询返回true。

Student继承自User,但只有StudentStudendClass。这个查询会有什么问题?

我基本上希望学生在特定的子窗体/学期(所有这些特性都处于Class

我使用的每heirachy模型构建表:。

modelBuilder.Entity<User>() 
      .Map<Teacher>(m => m.Requires("UserType").HasValue("Teach")) 
      .Map<Student>(m => m.Requires("UserType").HasValue("Stu")) 
      .Map<Staff>(m => m.Requires("UserType").HasValue("Staff")); 

编辑:

这也不会返回任何内容:

Users.OfType<Student>().Where(u => u.StudentClasses.Any(sc => true)) 
+0

你检查了EF生成的SQL吗?你不能使用`User.Where(....`? – Eranga 2011-12-17 01:23:22

+0

@Eranga cant,Student因此被继承`StudentClasses`不是`User`的一部分,`User`是基类 – 2011-12-17 23:03:43

回答

0

我100%确定有这些班的学生StudentClasses。

我99%肯定没有。 (如果您发现了一些严重的EF错误,则为1%)如果有Class.TermId == 1Class.SubFormId == 1的学生在上课,您的查询必须返回这些学生。

你的测试查询...

(context.)StudentClasses.Any(sc => sc.Class.TermId == 1 && sc.Class.SubFormId == 1) 

...无关,与你的原始查询。它只是说在StudentClasses表中至少有一行Class.TermId == 1Class.SubFormId == 1

它并不证明您有任何学生在这个特定的班级(或在这些特殊的班级中,如果有多于一班的班级,请拨打Class.TermId == 1Class.SubFormId == 1)。您的所有学生都可以在其他课程中,并且您的原始查询将正确地返回没有学生作为结果。所以,这与(context.)Users.OfType<Student>().Where(u => true)并不相同。

如果您仍然100%确定您应该在一个小例子中显示您的表格的内容,以使问题可以重现。