[英]Expression trees - parameter not mapped from lambda function argument to Expression Parameter
[英]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.Increment
和Expression.PostIncrementAssign
)-因此,您可以在运行时通过Expression.*
代码创建表达式树,但坦率地说那是痛苦且难以管理。 因此,这有可能改变,但不要抱太大希望。
同时请记住-表达式树分析,把它拉回来了又是远离琐碎。 可行,肯定; 简单:不。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.