我想知道如何选择特定数量的子对象而不是全部使用include? p>
假设我有对象'组',我需要选择加入该组的前十名学生。
当我使用'.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中。这够清楚了吗?感谢您的回复
答案 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));
这正是我想要的!
感谢所有回复!