Как я могу создать общий метод постраничного поиска в NHibernate - PullRequest
0 голосов
/ 03 мая 2011

У меня есть несколько сеточных интерфейсов с некоторыми функциями поиска / подгонки ... Количество фильтров - 'randon' ...

Например, в моем пользовательском интерфейсе Color я только что включил фильтр: Имя ... И мой метод подкачки / поиска:

public IEnumerable<Color> Search(string nameSearch, string order, int pageSize, int pageIndex, bool ascending, out int totalCount)
{
    var query = Session.QueryOver<Color>();
    var rowCountQuery = query.ToRowCountQuery();

    query.Where(color => color.Name.IsLike(nameSearch, MatchMode.Anywhere));

     if (ascending)
         query.OrderBy(x => x.Name).Asc();
     else
         query.OrderBy(x => x.Name).Desc();

     query.Take(__pageSize).Skip((pageIndex) * pageSize)
         .Future();

     totalCount = rowCountQuery.FutureValue<int>().Value;

     return query.List();
}

Пока все работает нормально ... Но у меня есть несколько других пользовательских интерфейсов с той же функциональностью, и я хотел бы создать общую функцию поиска ... Есть ли что-то подобное уже реализовано?

Любая помощь будет оценена!

1 Ответ

1 голос
/ 03 мая 2011

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

public IEnumerable<Color> Search(string nameSearch, string order, int pageSize, int pageIndex, bool ascending, out int totalCount)
{
    var query = Session.QueryOver<Color>();

    query.Where(color => color.Name.IsLike(nameSearch, MatchMode.Anywhere));

    return Page(query, order, pageSize, pageIndex, ascending, out totalCount);
}

public IEnumerable<T> Page<T>(IQueryOver<T,T> query, string order, int pageSize, int pageIndex, bool ascending, out int totalCount)
{
     var rowCountQuery = query.ToRowCountQuery();

     query.UnderlyingCriteria.AddOrder(new Order(order, ascending));

     query.Take(pageSize).Skip((pageIndex) * pageSize)
         .Future();

     totalCount = rowCountQuery.FutureValue<int>().Value;

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