1

我在我的 asp.net 4.0 Web 应用程序中使用 JqGrid,我想实现列排序。我的问题是我的 repo 类中的 Get 方法需要一个 Expression> 类型的 sort by 参数:

public IEnumerable<TEntity> Get<TOrderBy>(Expression<Func<TEntity, bool>> predicate, Expression<Func<TEntity, TOrderBy>> orderBy, int pageIndex, int pageSize, out int totalNumberOfRecords, SortOrder sortOrder = SortOrder.Ascending)
        {
            IEnumerable<TEntity> list = null;
            int numberOfRecordsToSkip = CalculateNumberOfRecordsToSkip(pageIndex, pageSize);
            if (sortOrder == SortOrder.Ascending)
            {
                list = GetQuery().Where(predicate).OrderBy(orderBy).Skip(numberOfRecordsToSkip).Take(pageSize).AsEnumerable().ToList();            
            }
            else
            {
                list = GetQuery().Where(predicate).OrderByDescending(orderBy).Skip(numberOfRecordsToSkip).Take(pageSize).AsEnumerable().ToList();
           }

            totalNumberOfRecords = GetQuery().Count(predicate);
            return list;
        }

当我只知道编译时实体的类型时,如何按表达式创建排序?我希望能够按任何列(或实体属性,如果您愿意)对网格进行排序。

应该创建按表达式排序的方法采用一个参数,即列名:

public Expression<Func<TEntity, TOrderBy>> CreateOrderByExpression(string sortColumn)
{

 // I don't know the TOrderBy type before this method is called. I know the TEntity type  // so getting the type of the sortColumn is easy. 
// But how do I create the Expression<Func<TEntity, TOrderBy>> from here ?

}

因此,方法 CreateOrderByExpression 的结果应该用作我的 repo 类中 Get 方法的参数。

你有什么建议吗?

4

1 回答 1

1

您可以使用 DynamicLinq 库(实际上是 1 个 .cs 文件):

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

我没有检查这个,但我相信它值得一看:https ://nuget.org/packages/DynamicLINQ

编辑:Nugget 包的示例:http ://weblogs.asp.net/davidfowler/archive/2010/08/19/dynamic-linq-part-2-evolution.aspx (看起来真的很好很容易!)

于 2012-05-16T16:16:50.423 回答