2016-06-23 4 views
2

Я пытаюсь добавить динамический порядок по направлению к моему запросу nhibernate. Может ли кто-нибудь помочь, как это сделать? Я смог добавить динамическое поле orderby. но не знаю, как сделать заказ по направлению. Здесь Вы можете найти мой код:Как добавить динамическую сортировку по направлению в NHibernate queryover

if (!string.IsNullOrEmpty(sortField)) 
    { 
     var sortByProperty = Helper.GetSortByProperty(sortField); 
     if (sortByProperty != null) 
     { 
      query.OrderBy(x => sortByProperty.GetValue(x, null)); 
     } 
    } 

    var result = query.Skip(pageIndex*pageSize) 
         .Take(pageSize) 
         .Future<Member>(); 
+0

Можете ли вы показать полный код для окончательного решения? Включая реализацию Helper.GetSortByProperty & sortByProperty.GetValue – Hussain

ответ

4

Как я сделал это, переходя в переменной в ListSortDirection типа функции, которая делает запрос.

Итак вы могли бы применить

  • OrderBy() которых:

сортирует элементы последовательности в порядке возрастания ключа.

  • OrderByDescending() которых:

сортирует элементы последовательности в порядке убывания в соответствии с ключом.

на вашем IQueryable<T> в зависимости от значений от ListSortDirection.Ascending или ListSortDirection.Descending.


В соответствии с просьбой ОП в комментариях, добавлен образец общий код:

public IList<T> GetEntityList<T>(Expression<Func<T, bool>> whereExpression, Expression<Func<T, object>> orderByExpression, ListSortDirection orderDirection, int totalPages, int start, int limit) 
{ 
    IList<T> returnVar; 
    using (var session = _nhibernate.OpenSession()) 
    { 
     var firstQueryable = session.Query<T>().Where(whereExpression); 

     IQueryable<T> secondQueryable = orderDirection == ListSortDirection.Ascending ? firstQueryable.OrderBy(orderByExpression) : firstQueryable.OrderByDescending(orderByExpression); 

     returnVar = totalPages > 0 ? secondQueryable.Skip(start).Take(limit).ToList() : secondQueryable.ToList();  
    } 

    return returnVar; 
} 


Чтобы решить еще один вопрос в комментарии от OP, для QueryOver API, например, вы можете использовать .OrderBy(orderByExpression).Desc для обратная сортировка.

+0

Хорошо. Не могли бы вы поделиться образцом кода для orderby с пользовательским свойством и специальным направлением, пожалуйста? –

+0

@MukilDeepthi см. Мое редактирование. – kayess

+0

спасибо. это то же самое для QueryOver? Извините, я не очень опытен wth NHibernate –