2011-12-16 42 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%確定您應該在一個小例子中顯示您的表格的內容,以使問題可以重現。