首页 > 解决方案 > lambda 表达式中的赋值

问题描述

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

我试着写如下:

Expression<Action<User>> update = user => user.Name = "Joe Foo";

但我有一个编译错误:

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

如何用 lambda 表示此更新。

编辑

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

业务服务的一个示例可能是:

public void DoStuff(String userId, ...)
{
  // Business logic here
  // ...

  // Persist updates determined above
  this.repository.Update(
    // First parameter is the filter of entities to updates
    x => x.Id == userId,
    // Next parameters are updates to apply
    x => x.FirstName = "John",
    x => x.LastName = "Foo",
    ...);
}

标签: c#

解决方案


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

你不能总是得到你想要的。

我们设计了表达式树 lambda 来表示非变异操作,因此在表达式树 lambda 中使用、等是非法的=+=++

如何用 lambda 表示此更新?

委托 lambda 没有这样的限制;你可以说

Action<User> update = user => user.Name = "Joe Foo";

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


推荐阅读