从lambda创建表达式树

时间:2012-01-09 22:27:01

标签: c# expression-trees

我有一个lambda表达式:

(x) => x.Visits++

在运行时,我想将其转换为字符串:

"set Visits = Visits + 1"

或者,如果底层数据存储不同(如MongoDB)

{$inc: {Visits : 1}}

我认为这样做的方法是使用表达式树,但是当我将lambda表达式分配给表达式树时,我得到“表达式树可能不包含赋值运算符”。

有没有办法完成编写支持Update的完整linq实现的缺点?

1 个答案:

答案 0 :(得分:4)

目前的C#编译器根本不支持,我没有听说过vNext的任何变化。当然,严格来说它没有为C#3/4定义 - 只有“在别处定义”(实际上,AFAIK:处理表达式树结构的规范仍未正式记录;这可能是一件好事,因为很难说它需要更改规格; p)。

有趣的是:从.NET 4.0开始,表达式树API 支持mutate(在这种情况下,请参阅Expression.IncrementExpression.PostIncrementAssign) - 所以你< strong>可以通过Expression.*代码在运行时创建表达式树,但坦率地说这是一个痛苦而且很难管理。因此,潜力可以改变,但不要太有希望。

另外请记住 - 表达式树分析将它再次拉回 out 远非微不足道。可行,当然;容易:没有。

相关问题