我们正在使用Lamda表达式和动态调用功能来对数据对象执行运行时查询。下面是一个示例代码。
Class Person{
string Id{get;set;}
}
Class Testclass{
public void querydata(Person person)
{
var parm=Expression.Parameter(typeof(Person),"Person")
string expression="Person.Id==\"1234\"";
var e=DynamicExpression.ParseLambda(new[] {parm},null,expression);
bool response= (bool)e.Compile().DynamicInvoke(person);
}
}
上面的函数工作得很好但是我们正在尝试构建泛型系统,其中消费者可以传递他们的数据对象(如上面的情况中的Person,但我们不知道它的实际类型。我们将把它作为JSON / XML等。 。)和表达式和系统必须执行运行时验证并根据结果做一些逻辑。
以下是伪代码:
[Httppost]
Public someResponse runtimeValidation(JObject complexdataobject, string expression)
{
var parm=Expression.Parameter(typeof(JObject),"Person")
string expression="Person.Id==\"1234\"";
var e=DynamicExpression.ParseLambda(new[] {parm},null,expression);
bool response= (bool)e.Compile().DynamicInvoke(person);
}
当我在上面运行时,我得到“类型JObject中没有属性ID”。
我一直在研究如何找到一种方法来创建表达式参数类型未知但能够弄明白该怎么做..
你可以指导我!!