2016-06-23 35 views
2

我想通過方向添加動態順序到我的nhibernate查詢。任何人都可以幫助如何做到這一點?我能夠添加動態orderby字段。但不知道如何按方向進行排序。請在下面找到我的代碼:如何添加動態排序方向NHibernate查詢

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或的值。


正如意見中的要求由OP,添加品的通用代碼:

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相同嗎?對不起,我不是非常有經驗的NHibernate –