我在我的 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 方法的参数。
你有什么建议吗?