【发布时间】:2012-01-09 22:27:00
【问题描述】:
我有一个 lambda 表达式:
(x) => x.Visits++
在运行时,我想把它翻译成字符串:
"set Visits = Visits + 1"
或者,如果底层数据存储不同(如 MongoDB)
{$inc: {Visits : 1}}
我认为这样做的方法是使用表达式树,但是当我将 lambda 表达式分配给表达式树时,我得到“表达式树可能不包含赋值运算符”。
除了编写一个支持更新的完整 linq 实现之外,有什么方法可以完成这个任务吗?
【问题讨论】:
-
@oleksii 在这种情况下不是,不是。如果没有
Expression<...>,它将编译(作为委托);Expression<...>不会。 -
会有这样的帮助吗(对于 linqpad)?诠释 i = 0;函数
inc = x => ++x;函数 dec = x => --x;表达式 > f = x => inc(dec(inc(x))); while(i -
CrazyDart - 我通过为“允许的操作”定义扩展方法开始了这条路。您是对的,它使球稍微向下移动了一点-至少现在编译器会生成一个表达式。它没有那么优雅,但现在可能是一个很好的折衷方案。
-
唉,CrazyDart - 也不支持带有语句体的表达式。对于复杂的查询,您的建议太笨拙了。不过,谢谢你的想法。
标签: c# expression-trees