c# - 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",
...);
}
解决方案
我想定义一些表示类实例属性更新的 lambda 表达式。
你不能总是得到你想要的。
我们设计了表达式树 lambda 来表示非变异操作,因此在表达式树 lambda 中使用、等是非法的=
。+=
++
如何用 lambda 表示此更新?
委托 lambda 没有这样的限制;你可以说
Action<User> update = user => user.Name = "Joe Foo";
你能多说一下你为什么需要这个吗?可能有更好的方法来实现您的目标。 您可能会问一个 XY 问题。这是一个你有问题的问题,你有一个糟糕的解决方案,现在你问的是一个关于糟糕的解决方案而不是问题的问题。您要解决的问题是什么?
推荐阅读
- javascript - jQuery 没有检测到生成的脚本元素
- python - 运行epicbox代码时权限被拒绝?
- pandas - 使用多个尝试例外和数据帧编译代码
- mysql - 使用用户的个人首选自定义属性扩展表
- cmake - 用于安装从 cmake 生成的二进制文件的 Yocto 配方
- facebook-graph-api - Facebook 营销 API 可让活动在特定日期处于活跃状态
- angular - Angular无法使用@Input读取未定义的属性
- mongodb - 对不同时间戳的时间序列求和 MongoDB
- sql - SELECT from 2 with compare and if not
- c - 预处理器保留关键字