2016-12-05 88 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

謝謝!希望有一個更好的方式,雖然:) –