当我进行查询时:
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
,但Student
只有StudendClass
。这个查询会出现什么问题?
我基本上希望学生使用特定的子表单/术语(所有这些属性都在Class
。
我正在使用Table perhechy。模型构建者:
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 :(得分:0)
我百分百肯定这些班级里有学生StudentClasses。
我99%肯定没有。 (对于您发现一些严重的EF错误的潜在案例,1%。)如果有Class.TermId == 1
和Class.SubFormId == 1
的班级的学生,您的查询必须返回这些学生。
您的测试查询...
(context.)StudentClasses.Any(sc => sc.Class.TermId == 1 && sc.Class.SubFormId == 1)
...与原始查询无关。它只表示StudentClasses
表格中至少有一行Class.TermId == 1
和Class.SubFormId == 1
。
它不能证明您有任何学生在这个特定班级(或者如果有多个班级有Class.TermId == 1
和Class.SubFormId == 1
,则在这些特定班级)。您的所有学生都可以在其他课程中,您的原始查询将正确地返回没有学生的结果。因此,这与(context.)Users.OfType<Student>().Where(u => true)
完全相同。
如果你仍然100%确定你应该在一个小例子中显示你的表的内容,以使问题可以为我们重现。