我必须以下列方式使用表达式动态创建Where子句:
Type enumerableType = typeof(Enumerable);
MemberInfo[] members = enumerableType.GetMember("Where*");
MethodInfo whereDef = (MethodInfo)members[0];
Type TSource = whereDef.GetGenericArguments()[0];
Type[] types =
{
typeof(IEnumerable<>).MakeGenericType(TSource),
typeof(Func<,>).MakeGenericType(TSource, typeof(Boolean))
};
MethodInfo method = enumerableType.GetMethod("Where", types);
Expression.Call(null, method , new Expression[]
{
Expression.Lambda(newEX,new ParameterExpression[]{param})
});
我遇到的问题是Expresssion.call
我收到以下错误:
方法System.Collections.Generic.IEnumerable`1 [TSource] 其中[TSource(System.Collections.Generic.IEnumerable`1 [TSource] System.Func`2 [TSource,System.Boolean])是一个通用的方法定义
有人可以告诉我如何克服这个问题吗?
P.S:表达式树是通过引用反射器生成的代码构建的。在反射器中,代码如下:
Expression.Call(null, (MethodInfo) methodof(Enumerable.Where),
new Expression[] ...