返回嵌套的通用表达式<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是什么?