【问题标题】:How to simplify an expression when converting it to a string?将表达式转换为字符串时如何简化表达式?
【发布时间】:2020-10-10 15:21:14
【问题描述】:

我需要将表达式从 WinForms 客户端传递到 WebApi。我有以下表达式:

var results = somelist.Select(p => p.Id).ToList<int>();
Expression<Func<MyObj, bool>> myexp = x => results.Contains(x.Id);

然后我就这么做了:

var str = myexp.Body.ToString();

但是,在这个特定示例中,表达式主体如下所示:

value(MyApp.MyForm+c__DisplayClass41_0).results.Contains(x.Id)

当将字符串翻译回服务器端表达式时,这显然不起作用。

有没有办法以更好的方式减少、编译任何表达式?还是应该使用 Remote.Linq 或 Serialize.Linq 等 3rd 方解决方案?

【问题讨论】:

标签: c# lambda


【解决方案1】:

这取决于你需要对服务器端的表达式做什么。

如果你真的只需要一个字符串表示,你可能想要实现一个ExpressionVisitor。但是,这可能需要相当多的努力,具体取决于您需要支持的表达式类型。

如果您想转换回正确的表达式树并在服务器端执行表达式,绝对值得一看 Remote.Linq

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2010-12-12
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多