Помогите с IQueryables и lazyLoading в asp.net mvc - PullRequest
0 голосов
/ 07 февраля 2011

Скажите, что я хочу добавить поддержку нумерации страниц. Мое приложение разделено на Веб, Сервисы и репозитории.

Контроллер говорит только со Службой, а Служба получает данные и выполняет бизнес-логику.

Скажите, что мне нужна поддержка нумерации страниц. У меня есть этот метод в моем ContributorService

public IQueryable<Contributor> GetContributors(int page, int pageSize)
        {
            return _repository.GetAll().OrderBy(c=>c.ACC_CREATEDATE).Skip((page)*pageSize).Take(pageSize);//solo temporalmente
        }

это нормально ?? или OrderBy, Skip, Take должен быть выполнен в хранилище?

, который в настоящее время делает только это

public IQueryable<Contributor> GetAll()
        {
            return db.Contributors;
        }

1 Ответ

0 голосов
/ 07 февраля 2011

Я бы добавил запрос к бизнес-объекту (я думаю, что у вас его нет, не так ли), там у вас может быть его базовая версия и еще одна для выгружаемых данных. И я ожидаю, что служба выполнит этот запрос, вызвав ToList, я считаю опасным возвращать объект запроса в контроллер.

В вашем хранилище может быть метод GetPartial с параметрами sort, from, to и filter. Если у вас есть универсальный сервис, вы также можете реализовать его в этом универсальном сервисе.

public List<Contributor> GetPartial<TSortBy>(Expression<Func<Contributor, TSortBy>> sortByExpr, Expression<Func<Contributor, bool>> filterExpr, int pageNo, int pageSize)
        {
            var query = db.Contributors;
            if (filterExpr != null)
                   query.Where(filterExpr);
query.orderBy(sortByExpr).Skip (...).Take(...).ToList();

        }

если у вас есть класс репозитория, вы можете добавить этот метод. Кстати, я использую Dynamic LINQ, что упрощает передачу порядка по выражению в виде простого текста (как sql)

...