如何在实体框架3.5中选择特定数量的子实体而不是全部?

时间:2010-06-17 20:43:37

标签: entity-framework linq-to-entities

我想知道如何选择特定数量的子对象而不是全部使用include?

假设我有对象'组',我需要选择加入该组的前十名学生。

当我使用'.Include(“学生”)时,EF包括所有学生。我试图使用Take(10),但我对EF和编程也很陌生,所以我无法弄明白。 有什么建议?

更新:

好的,我已经从db中检索了Group对象,如下所示:

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

我知道我可以添加Include("Students")声明,但这会带给所有学生,而且我的数量可能会非常大,我是否只需要最新的10名学生。我可以这样做:var groupWithStudents = group.Students.OrderByDescending(//...).Take(10);

这个问题是Take<>不再出现在intellisense中。这够清楚了吗?感谢您的回复

2 个答案:

答案 0 :(得分:3)

我相信Take(10)是正确的。

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

我对Take的经验是它产生了一些糟糕的sql。

修改

看看这篇博文是否有帮助,它谈到条件包括。

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

答案 1 :(得分:1)

无法通过条件包含工作制作Gratzy的建议......并在此处找到解决方案:http://msdn.microsoft.com/en-us/library/bb896249.aspx

查询看起来像这样:

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

这正是我想要的!

感谢所有回复!