获取包含集合的子集

时间:2016-12-05 18:34:31

标签: c# linq

我想尝试只收集包含的集合的前20个条目。例如:

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

我只想要第一支队伍中的20支队伍,而每支队伍我只需要前20名队员。 Take(20)适用于团队,但我无法弄清楚如何只吸引20名团队成员

1 个答案:

答案 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(); 
    }