C# 修改扩展方法以允许ThenBy

C# 修改扩展方法以允许ThenBy,c#,linq,extension-methods,C#,Linq,Extension Methods,我有下面的自定义扩展方法,它允许您动态指定将对哪个字段进行排序—它用于绑定到JQuery数据表中 public static IQueryable<T> OrderByField<T>(this IQueryable<T> q, string SortField, string SortDirection) { var param = Expression.Parameter(typeof(T), "p"); var prop = Expressio

我有下面的自定义扩展方法,它允许您动态指定将对哪个字段进行排序—它用于绑定到JQuery数据表中

public static IQueryable<T> OrderByField<T>(this IQueryable<T> q, string SortField, string SortDirection)
{

  var param = Expression.Parameter(typeof(T), "p");
  var prop = Expression.Property(param, SortField);
  var exp = Expression.Lambda(prop, param);

  var method = SortDirection == "asc" ? "OrderBy" : "OrderByDescending";

  var types = new Type[] { q.ElementType, exp.Body.Type };
  var mce = Expression.Call(typeof(Queryable), method, types, q.Expression, exp);

  return q.Provider.CreateQuery<T>(mce);

}
公共静态IQueryable OrderByField(此IQueryable q、字符串SortField、字符串SortDirection)
{
var param=表达式参数(类型(T),“p”);
var prop=Expression.Property(param,SortField);
var exp=表达式Lambda(prop,param);
var method=SortDirection==“asc”?“OrderBy”:“OrderByDescending”;
var types=新类型[]{q.ElementType,exp.Body.Type};
var mce=Expression.Call(typeof(Queryable)、方法、类型、q.Expression、exp);
返回q.Provider.CreateQuery(mce);
}
然后按如下方式调用:
.OrderByField(“ColumnName”、“asc”)
,其中两个参数是字符串

我希望修改此函数以允许在之后立即调用“thenby”,但是我不确定如何执行此操作


非常感谢您的帮助。

您可以直接调用
OrderBy()
OrderByDescending()
(不通过
CreateQuery()
),然后返回
IOrderedQueryable
您应该为
SortDirection
使用枚举。这些值直接从AJAX请求填充。MVC可以绑定到枚举吗?请确保同时查看副本的最新答案。但是,OrderBy没有允许您将字段名作为字符串传递的重写,您将如何执行此操作。@GavinCoates:您需要传递一个
表达式
。您可能需要反射来通用地调用它。您能演示如何这样做吗?