2010-06-17 53 views
1

我想知道如何選擇特定數量的子對象而不是全部使用包含?如何在實體框架3.5中選擇具體數量的子實體而不是全部?

可以說我有對象'組',我需要選擇加入該組的最後十名學生。

當我使用'.Include(「學生」)時,EF包括所有學生。我試圖使用Take(10),但我對EF和編程也很新,所以我無法弄清楚。 有什麼建議嗎?

更新:

行,我也從DB這樣已經獲取組對象:

Group group = db.Groups.FirstOrDefault(x=>x.GroupId == id)

我知道,我可以添加Include("Students")聲明,但會帶來所有的學生,無論我只需要最新的10名學生,他們的人數可能相當大。我可以做這樣的事情:var groupWithStudents = group.Students.OrderByDescending(//...).Take(10);

與此問題是,採取<>不再出現在intellisense。這足夠清楚了嗎?感謝您的回覆

回答

1

無法使Gratzy的建議與條件包括工作......在這裏找到了解決辦法:http://msdn.microsoft.com/en-us/library/bb896249.aspx

查詢應該是這樣的:

group.Students.Attach(group.Students 
          .CreateSourceQuery() 
          .OrderByDescending(x=>x.JoinDate) 
          .Take(10)); 

這正是我在尋找!

感謝您的所有迴應!

+0

很高興您找到解決方案! – Gratzy 2010-06-18 16:32:09

3

我相信Take(10)將是正確的。

var Students= (from c in Groups 
       orderby c.DateAdded descending 
       select c).Take(10); 

我的經驗雖然是它會產生一些可怕的SQL。

編輯:

看看這篇博客文章的幫助,就六方會談的條件包括。

http://blogs.msdn.com/b/alexj/archive/2009/10/13/tip-37-how-to-do-a-conditional-include.aspx

+0

我如何將它添加到已選組?有什麼比使用Take(10)更好的方法? – Alex 2010-06-17 21:00:07

+0

「我如何將它添加到已選組?」我不明白 – Gratzy 2010-06-17 21:11:03

+0

他希望加載的實體與對象圖的其餘部分連接。這不是最好的解決方案,但您可以使用.Include(「組」)加載學生。這意味着他們沒有真正連接。但是你可以訪問組的數據。 – DHN 2010-06-17 21:17:03