我在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
和所有其他数据类型(string
,int
等)中获得此例外而没有问题。
我在互联网上找不到任何类似的东西,所以我想我要么做错了,要么这是一种非常罕见的情况。
非常感谢任何有关如何解决此问题的想法。