无法转换类型&System; System.Reflection.RuntimeConstructorInfo'输入' System.Reflection.MethodInfo'

时间:2015-09-01 12:56:46

标签: c# linq reflection dynamic-linq

我在ASP.NET MVC项目中使用 Dynamic LINQ 来在运行时创建查询。

首先,我从客户的请求中创建一个字符串,如下所示:

string predicate = GetPredicateString(request);

predicate的值为"AvailableFrom = DateTime(2015, 10, 05)"

然后在我的代码中,我调用ParseLambda类的DynamicLinq.DynamicExpression方法,如下所示。

var lambda = DynamicExpression.ParseLambda(typeof(Product), typeof(bool), predicate)

这样做我收到以下异常:

无法转换类型为' System.Reflection.RuntimeConstructorInfo'的对象输入' System.Reflection.MethodInfo'。

Line 1958: int FindBestMethod(IEnumerable<MethodBase> methods, Expression[] args, out MethodBase method){
Line 1959: MethodData[] applicable =
               methods
                   .Select(m => new MethodData
                   { 
                       MethodBase = m,
                       Parameters = m.GetParameters()
                           .Where(p => p.ParameterType != ((MethodInfo)m).ReturnType).ToArray()
                   })
                   .Where(m => IsApplicable(m,args)).ToArray();

以上片段的这一部分必须抛出异常:

(MethodInfo)m

我试图传递匹配DateTime结构的其他构造函数重载的参数,但它没有任何区别。因此,可以排除传递无效参数的原因。

我必须说我只是在DateTime和所有其他数据类型(stringint等)中获得此例外而没有问题。

我在互联网上找不到任何类似的东西,所以我想我要么做错了,要么这是一种非常罕见的情况。

非常感谢任何有关如何解决此问题的想法。

0 个答案:

没有答案