微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何制作一个 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 举报,一经查实,本站将立刻删除。