如何按方向向 NHibernate queryover 添加动态排序

How to add dynamic sort by direction to NHibernate queryover

我正在尝试按方向向我的 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>();

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

那么你可以应用

  • OrderBy() 其中:

Sorts the elements of a sequence in ascending order according to a key.

  • OrderByDescending() 其中:

Sorts the elements of a sequence in descending order according to a key.

在你的 IQueryable<T> 上取决于 ListSortDirection.AscendingListSortDirection.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;
}


要解决 OP 评论中的另一个问题,例如,对于 QueryOver API,您可以使用 .OrderBy(orderByExpression).Desc 进行反向排序。