我希望将我的Linq表达式(Expression\\>)编译成字符串。
这个很好用:
Expression<Func<MyTestClass, bool>> q5 = x => x.Prop1 == "abc" || x.Prop2 == 123;
通过调用q5.Body.ToString(),我得到了预期的输出:
((x.Prop1 == "abc") OrElse (x.Prop2 == 123))
然而,当我将任何BinaryExpression的右侧替换为更复杂的值时,问题就开始了。例如:
var item = new MyTestClass {Prop2 = 123};
var prop2 = 23;
string prop = "abc";
Expression<Func<MyTestClass, bool>> q5 = x => x.Prop1 == prop || x.Prop2 == item.Prop2;
输出结果如下:
我大致了解这个表达式为什么会编译成这样,可能需要查找MemberExpression类型的所有表达式部分并评估成员值,但是是否有更简单的方法来获得类似第一个示例的东西呢? 我所需要做的就是将“value(Tests.LambdaTests+<>c__DisplayClass0_0).item.Prop2)”替换为它的值。((x.Prop1 == value(Tests.LambdaTests+<>c__DisplayClass0_0).prop) OrElse (x.Prop2 == value(Tests.LambdaTests+<>c__DisplayClass0_0).item.Prop2))
谢谢。