返回嵌套的通用表达式<Func >
错误消息“无法找到类型或命名空间名称’T’。”
???
public static Expression<Func> MakeFilter(string prop, object val) { ParameterExpression pe = Expression.Parameter(typeof(T), "p"); PropertyInfo pi = typeof(T).GetProperty(prop); MemberExpression me = Expression.MakeMemberAccess(pe, pi); ConstantExpression ce = Expression.Constant(val); BinaryExpression be = Expression.Equal(me, ce); return Expression.Lambda<Func>(be, pe); }
相关链接:
使用reflection来解决Linqed属性
http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/df9dba6e-4615-478d-9d8a-9fd80c941ea2/
通用Func 的运行时创建
您需要使方法本身通用:
public static Expression> MakeFilter(string prop, object val) -+- ^ +- this
没有为您的方法定义generics参数。 你应该定义一个( MakeFilter
):
public static Expression> MakeFilter(string prop, object val) { ParameterExpression pe = Expression.Parameter(typeof(T), "p"); PropertyInfo pi = typeof(T).GetProperty(prop); MemberExpression me = Expression.MakeMemberAccess(pe, pi); ConstantExpression ce = Expression.Constant(val); BinaryExpression be = Expression.Equal(me, ce); return Expression.Lambda>(be, pe); }
该方法需要声明为通用( MakeFilter
):
public static Expression> MakeFilter(string prop, object val)
否则,调用者还能如何指定T
是什么?