将表达式转换为字符串时如何简化表达式?

时间:2020-10-10 15:21:14

标签: c# lambda

我需要将表达式从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?

1 个答案:

答案 0 :(得分:0)

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

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

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

相关问题