使用EntityFramework的结果的分页列表

时间:2018-06-13 09:09:39

标签: c# entity-framework

我有一个包含用户和社区数据的简单SQL Server数据库。任何用户都可以是任意数量社区的成员,因此我有3个表:UsersCommunitiesMap,以及相应的POCO C#类。 我使用EntityFramework获取所有社区及其成员的字典:

public Dictionary<Community, List<User>> GetData()
{
    var communitiesAndUsers =
        from community in DbContext.Communities
        from map in DbContext.CommunityUserMap.Where(c => c.Community == community )
        select new { Community = community, User = map.User };


    var result = new Dictionary<Community, List<User>>();
    foreach (var communityGroup in communitiesAndUsers.ToList().GroupBy(x => x.Community.Id))
    {
        var community = communityGroup.First().Community;
        var users = communityGroup.Select(g => g.User).ToList();
        result.Add(community, users);
    }

    return result;
}

现在我需要在这种方法中支持分页:

public Dictionary<Community, List<User>> GetData(int page, int communitiesPerPage)

我需要使用1个SQL查询来执行此操作。我如何修改我的方法以支持它?

1 个答案:

答案 0 :(得分:0)

使用SkipTake来实现分页。您还需要定义排序条件(Orderby)以获得一致的结果。

var pagedCommunityGroups = communitiesAndUsers
    .GroupBy(cau => cau.Community.Id)
    .OrderBy(grp => grp.Key)
    .Skip(page * communitiesPerPage) // assume first page has number 0
    .Take(communitiesPerPage)
    .ToList();                       // execute query

由于在应用communitiesAndUsersSkip之前尚未枚举Take,因此会导致单个SQL查询(查询将在ToList上执行)。< / p>