在ASP.NET 5中动态执行字符串作为代码(eval)

时间:2015-12-22 20:30:48

标签: c# asp.net-core roslyn

有没有办法在ASP.NET 5中使用Roslyn执行字符串作为C#代码?

在我的情况下,我想将字符串动态转换为linq表达式。

例如:

obj.SomeFunc( "x => x.Username".ToLinqExpression() );

或类似的东西:

Eval("obj.SomeFunc(x => x.Username); ");

这可以在ASP.NET 5中使用吗?

3 个答案:

答案 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.