使用表达式动态创建Where子句

时间:2014-12-22 10:14:58

标签: c# linq generics dynamic expression

我必须以下列方式使用表达式动态创建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[] ...

0 个答案:

没有答案