C#表达式树-动态值查找

C#表达式树-动态值查找,c#,linq,C#,Linq,我正在构建一个C#表达式树来计算简单表达式。表达式字符串被解析为树,并通过使用paranthese尊重基本运算符(数学、逻辑和关系)以及优先级 除了bool、string和integer类型之外,我还需要在运行时计算表达式的一些元素。它们由模板化字符串表示,例如: ([firstname] == "bob") && ([surname] == "builder") 上述表达式将针对(可能很大)数量的对象进行计算,这些对象为当前表达式调用提供上下文,例如在循环中。模板化部分将在当

我正在构建一个C#表达式树来计算简单表达式。表达式字符串被解析为树,并通过使用paranthese尊重基本运算符(数学、逻辑和关系)以及优先级

除了bool、string和integer类型之外,我还需要在运行时计算表达式的一些元素。它们由模板化字符串表示,例如:

([firstname] == "bob") && ([surname] == "builder")
上述表达式将针对(可能很大)数量的对象进行计算,这些对象为当前表达式调用提供上下文,例如在循环中。模板化部分将在当前上下文中使用,例如,在示例中解析当前用户的名字和姓氏,并解析表达式解析中使用的值,而不是模板化字符串

一种解决方案是在解析时解析模板化的值,这样就可以使用常量表达式类型,并且可以知道值的类型。但是,重新构建和重新编译每次使用的表达式树都会对性能产生不利影响

因此,我需要一个表达式类型,其: -值类型在分析时未知,并且 -在调用时由方法调用解析

E.g. Desired example of usage in pseudo code
ExpressionParser parser = new ExpressionParser(); // parses and builds expression trees
MyParsedExpression expression = parser.Parse("([firstname] == 'bob') && ([surname] == 'builder'"); // wrapper for the parsed expression
foreach (Object user in users)
{
    expression.Context = user;
    Boolean result = expression.EvaluateTruth(); 
    if (result == true)
    {
       // do something
    }
}
谢谢,
fturtle

使用
参数表达式
表示传入参数。至于类型异常。。。在构建表达式树时,您知道数据的类型吗?如果不是,那确实让事情变得更难

如果这对你有用的话,我最近用一些源代码回答了一个问题。它可能不会立即对您有用,但它应该是一个良好的开端


编辑:我不确定表达式树在这里是否会对您有多大用处。尤其是
PropertyExpression
包含相关的
PropertyInfo
,因此它需要知道正在使用的类型。如果每个值的类型都可以更改,则必须为每个值重建表达式树…

为响应干杯。我不确定参数表达式是否会对我有所帮助,因为表达式可以嵌套,并且可能包含任意数量的模板值。此外,在构建表达式树时,类型未知。总之,我想我是在寻找某种代表的表达方式。我恐怕现在还不太清楚你想做什么,什么时候知道什么信息。你已经掌握了解析方面的知识了吗?你有什么信息,你没有什么?您是否可以存储一些中间形式,以便以后构建强类型表达式树?