2016-12-05 76 views
1

我想只采取包含集合的前20个条目。例如:采取包括集合的子集

var teamsWithTeamMembers = (from t in db.Teams 
     orderby t.Name 
     select t) 
    .Include("TeamMembers") 

我只想要20个第一队,对于每个队我只想要前20名队员。 Take(20)工程队,但我无法弄清楚如何只需要团队成员的20

+1

看那http://stackoverflow.com/questions/9545428/how-to-limit-number-of-related-data-with-include似乎相似。 – Johnny

+0

我的不好,我正在用错误的词条搜索 –

回答

3

你在这里

  • 两个选择投影使用匿名类型(如我的例子),或者您的查询DTO

    var teamsWithTeamMembers= db.Teams.OrderBy(t=>t.Name) 
              .Select(e=>new {e.Name,Team=e.TeamMembers.OrderBy(p => p.SomeProperty).Take(20)}) 
              .Take(20); 
    
  • 使用显式加载:

    var teams= db.Teams.OrderBy(t=>t.Name); 
    

    然后:

    foreach(var t in teams)//be careful here, a round trip to your DB per each team 
    { 
    context.Entry(t) 
        .Collection(b => b.TeamMembers) 
        .Query() 
        .OrderBy(p => p.SomeProperty).Take(20) 
        .Load(); 
    } 
    
+0

谢谢!希望有一个更好的方式,虽然:) –