2010-06-17 66 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