如何通过NHibernate查询的方向添加动态排序

时间:2016-06-23 14:17:39

标签: c# linq oracle11g fluent-nhibernate

我正在尝试按方向向我的nhibernate查询添加动态顺序。任何人都可以帮忙怎么做?我能够添加动态orderby字段。但不知道如何按方向做订单。请在下面找到我的代码:

    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>();

1 个答案:

答案 0 :(得分:4)

我这样做的方法是,将ListSortDirection类型变量传递给正在执行查询的函数。

那么你可以应用

  • OrderBy()其中:
  

根据键按升序对序列的元素进行排序。

  • OrderByDescending()其中:
  

根据键按降序对序列的元素进行排序。

<{1>}上的

取决于IQueryable<T>ListSortDirection.Ascending的值。

根据OP在评论中的要求,添加了示例通用代码:

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; } API,您可以使用QueryOver进行反向排序。