Lambda表达式中的赋值

gen*_*ane 1 c#

我想定义一些lambda表达式来表示类实例属性的更新。

我试着写如下:

Expression<Action<User>> update = user => user.Name = "Joe Foo";
Run Code Online (Sandbox Code Playgroud)

但是我有一个编译错误:

错误CS0832表达式树可能不包含赋值运算符。

如何用lambda表示此更新。

编辑

我的目标是使业务服务将更新发送到通用存储库。该存储库可以分析lambda的表达式以构建查询以发送到数据库引擎。

商业服务的示例可以是:

Expression<Action<User>> update = user => user.Name = "Joe Foo";
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 5

我想定义一些lambda表达式来表示类实例属性的更新。

您不能总是得到想要的东西。

我们设计表达式树lambda表达式来表示非变异操作,所以使用=+=++等在一个表达式树的λ是非法的。

如何用lambda表示此更新?

委托lambda不受此限制;你可以说

Action<User> update = user => user.Name = "Joe Foo";
Run Code Online (Sandbox Code Playgroud)

您能否说说为什么需要这个?可能会有更好的方法来实现您的目标。 您可能会问一个XY问题。这是一个问题,您有一个问题,您有一个不好的解决方案,现在您要问的是有关不好的解决方案的问题,而不是问题。您要解决的问题是什么?

  • @ OlivierJacot-Descombes:是的。我们为LINQ创建了表达式树,但需要为DLR向它添加更多节点,但从未向C#编译器添加对新节点的支持。 (3认同)