【发布时间】:2021-09-01 13:49:07
【问题描述】:
我想定义一些表示类实例属性更新的 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",
...);
}
【问题讨论】:
-
你为什么要这样做,显然你不能?但是,如果我们能弄清楚为什么我们可以为您提供其他东西
-
假设您询问
Expression因为您想自己转换它,您可以使用类似于Moq approach -Mock.Of<User>( m => m.Name == "wahtever" && m.Email == "some@example.com");的==解决方法...但从问题中不清楚您的实际目标是什么 - 所以不是答案(也基于对 Eric 答案的评论,这可能是您想要的) -
我改了标题;将值分配给变量或属性的运算符是 assignment 运算符。 任务是有外遇的恋人之间的秘密会面。 :-)
-
您的更新使这里发生的事情更加清晰。 LINQ 的设计初衷不是为了表示改变数据库的“更新”查询。它仅用于表示提取数据的查询:选择、分组、连接、过滤、排序等。
标签: c#