【发布时间】:2015-04-01 09:11:56
【问题描述】:
我想为我的项目实现通用寻呼机和过滤视图模型,但我一直坚持使用反射获取 OrderBy 方法。这是我尝试过的,但不断收到null for methodInfo。似乎我将错误的 Type[] 参数传递给 GetMethod() 方法,但我无法正确处理。
protected virtual Expression<Func<T, IComparable>> GetOrderByExpression()
{
var type = typeof(T);
var property = type.GetProperty("DataSetName");
var parameter = Expression.Parameter(type, "x");
var propertyAccess = Expression.MakeMemberAccess(parameter, property);
var orderByExp = Expression.Lambda(propertyAccess, parameter);
var methodInfo = typeof(Enumerable).GetMethod("OrderBy", new Type[] { orderByExp.Body.Type });
var predicateBody = Expression.Call(propertyAccess, methodInfo, orderByExp);
var expression = Expression.Lambda<Func<T, IComparable>>(predicateBody, parameter);
return expression;
}
【问题讨论】:
-
由于
OrderBy是一种扩展方法,我不确定它是否会存在于该上下文中。 -
This question, and answer 似乎有适当的信息来解决您的问题。
-
我会试试的。谢谢。
标签: c# asp.net-mvc reflection expression-trees