2016-06-23 17 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またはListSortDirection.Descendingからの値に応じました。コメントで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; 
} 


あなたが .OrderBy(orderByExpression).Descのために使用することができ、たとえば、 QueryOver APIのために、OPからのコメントで別の質問に対処するために逆ソート。

+0

カスタムプロパティとカスタムディレクションでorderbyのサンプルコードを共有してもよろしいですか? –

+0

@MukilDeepthi私の編集を参照してください。ありがとう。 – kayess

+0

ありがとう。これはQueryOverでも同じですか?申し訳ありませんが、NHibernate –

関連する問題