Func<TCollection, T>我的代码中有一个.我用它来选择某些属性.
在调用另一个方法时我需要Expression<Func<TCollection, T>>作为参数.
有什么办法转换(或创建)Func<TCollection, T>到Expression<Func<TCollection, T>>?
谢谢
我需要一种方法来在将来的某个时刻重新创建动态生成的报告.简而言之,我需要将特定的linq查询(每个报告不同)存储到数据库中,然后使用动态Linq执行查询.
这一切都很好,但我找不到将表达式转换为字符串的方法.
如:
Expression<Func<Product, bool>> exp = (x) => (x.Id > 5 && x.Warranty != false);
Run Code Online (Sandbox Code Playgroud)
应成为:
"Product.Id > 5 && Product.Warranty != false"
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我需要将IL转换为c#代码.我有一个集会,我正在阅读这个集会.我从MethodInfo获取MethodBody,方法体有一个方法GetILAsByteArraY(),它返回一个字节数组,现在我想将这个IL转换为C#代码.请帮我解决这个问题.
给出以下语句lambda示例:
var fMyAction = new Action(() =>
{
x += 2;
something = what + ever;
});
Run Code Online (Sandbox Code Playgroud)
有什么方法可以获得lambda的主体并将其转换为字符串?(最终会允许为Action这种类编写扩展方法的东西:fMyAction.Dump()将返回"x += 2; something = what + ever;").
谢谢
之前的问题询问是否可以将已编译的委托转换为表达式树,例如:
当时理智的答案是:
但幸运的是,有一些非常疯狂/疯狂的伟大的人喜欢逆向工程的东西,他们让我们其他人的事情变得容易.
显然,可以将IL反编译为C#,因为Reflector会这样做,因此您原则上可以使用支持所有语句类型的CLR 4.0表达式树.这很有意思,因为编译器对Expression<>lambdas 的内置特殊支持永远不会扩展为支持编译器中的构建语句表达式树并不重要.图书馆解决方案可填补这一空白.然后,我们将有一个高级别的起点,用于编写类似方面的代码操作,而不必混淆原始IL.
如上述相关问题的答案所述,有一些有希望的迹象,但我没有成功地发现自搜索以来是否取得了很大进展.
那么有人完成这项工作,还是走得很远?
注意: CLR 4.0现已发布.再看看的时间 - 看.
我一直在使用反射器来反编译几个简单的c#应用程序,但我注意到虽然代码被反编译,但我仍然看不到它们写在VS上的东西.我认为这就是编译器用机器代码替换人类指令的方式.但是我想我会尝试一下并在这里问一下.也许有一个反编译器可以反编译并显示与原始代码几乎完全相同的编码.