Постраничный список результатов с использованием EntityFramework - PullRequest
0 голосов
/ 13 июня 2018

У меня есть простая БД SQL Server, содержащая данные для пользователей и сообществ.Любой пользователь может быть членом любого количества сообществ, поэтому у меня есть 3 таблицы: Users, Communities и Map и соответствующие классы 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 голосов
/ 13 июня 2018

Используйте Skip и Take для реализации подкачки.Вам также необходимо определить критерии сортировки (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

Поскольку communitiesAndUsers не было перечислено до применения Skip и Take, это приведет кодин SQL-запрос (запрос будет выполнен на ToList).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...