有没有办法在ASP.NET 5中使用Roslyn执行字符串作为C#代码?
在我的情况下,我想将字符串动态转换为linq表达式。
例如:
obj.SomeFunc( "x => x.Username".ToLinqExpression() );
或类似的东西:
Eval("obj.SomeFunc(x => x.Username); ");
这可以在ASP.NET 5中使用吗?
答案 0 :(得分:2)
您可以使用Roslyn Scripting执行此类操作。例如:
public class Globals
{
public ObjType obj;
}
…
CSharpScript.EvaluateAsync(
"obj.SomeFunc(x => x.Username)", globals: new Globals { obj = obj });
答案 1 :(得分:0)
如上所述,您可以尝试Dynamic Linq。我曾经习惯于根据动态属性生成排序,它看起来效果很好。
答案 2 :(得分:0)
评估字符串需要编译,可以使用Expression Class轻松构建表达式树并编译委托。
Expression类位于System名称空间中。
以下是两种方法:
static Func<int, int, int, int, int> delInt = (i, j, k, l) => i + j * k - l;
int rslt1 = delInt(2, 3, 4, 5); // evaluates lambda and returns int
static Func<int> delInt1 = () => 2 + 3 * 4 - 5; // type the expression after => instead of assigning it to a string.
int rslt2 = delInt1(); // takes no parameters and returns int result.