繁体   English   中英

从Lambda创建表达式树

[英]Creating expression trees from lambda

我有一个lambda表达式:

(x) => x.Visits++

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

"set Visits = Visits + 1"

或潜在地,如果基础数据存储区不同(例如MongoDB)

{$inc: {Visits : 1}}

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

有没有什么办法可以编写一个完整的支持Update的linq实现呢?

目前的C#编译器根本不支持该功能,而且我还没有听说vNext会有任何更改。 当然, 严格来说,它不是为C#3/4定义的-只有一个“在其他地方定义”(实际上,AFAIK:处理表达式树构造的规范尚未正式记录;这可能是一件积极的事情,因为很难说它将需要更改规格; p)。

有趣的是:从.NET 4.0开始,表达式树API 确实支持mutate(在这种情况下,请参见Expression.IncrementExpression.PostIncrementAssign )-因此,您可以在运行时通过Expression.*代码创建表达式树,但坦率地说那是痛苦且难以管理。 因此,这有可能改变,但不要抱太大希望。

同时请记住-表达式树分析,把它拉回来又是远离琐碎。 可行,肯定; 简单:不。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM