如何制作一个 System.Expressions 来接收带有赋值的动作 lambda?

问题描述

我打算编写一个函数来接收一堆表达式并返回一个带有 sql QueryString 的对象和一个带参数的字典,这个函数专门用于创建更新语句,我还有 2 个其他函数能够更新 1 或一堆对象,但它发送实例的所有字段和值,我需要根据谓词更新数据库,而不是我在应用程序上加载的对象。

这个函数的签名应该是这样的:

public QueryAndParams GenerateUpdateQuery<T>(Expression<Action<T>> Set,Expression<Func<T,bool>> Where)

用法

var query = sqlGenerator.GenerateUpdateQuery<Schedules>(
    Set = x=> {
        x.ParentSchedule = null;
        x.someOtherFieldJustForExample = false;
    },Where = x=> x.ParentSchedule == someOtherSchedule.RID
);

我的问题是,使用第二个表达式(对于 Where 子句),它工作正常,我能够剖析该表达式并将其转换为有效的 where 子句,但是 Set 的表达式给了我编译器错误 {{用户代码上的 1}} 和 **CS0832**: An expression tree may not contain an assignment operator.

有没有办法让函数接收看起来像 **CS0834**: A lambda expression must have an expression body to be converted to an expression tree. 的东西,但里面是一个表达式树,或者有没有办法以某种方式将 Action<T> 变成表达式树,在一个我不会在用户代码上获得这些编译器限制?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)