2014-02-12 20 views
0

我有一个文本框,我希望用户指定在if语句中使用的条件表达式。例如,让我们说在我的代码中,我有一个名为myVariableint具有一定的价值。然后用户输入一个 “C#-parsable” 表达如如何实现用户生成的条件语句?

@myParameter < 20

,或者甚至

@myParameter > 5 && @myParameter < 20

myTextBox。我想我的代码是像

ConditionalExpression cond = new ConditionalExpression(); 
cond.Expression = myTextBox.Text; //Get the text from textbox. 
cond.Parameters.Add("@myParameter",myVariable); //use value of 'myVariable" at "@myParameter" 

if (cond.Evaluate()){  //if cond evaluates to true 
    //do stuff 
} 

是否有任何形式的类的,我可以使用实现字符串解析,或做我必须做的字符串分析我自己,然后以某种方式利用来自系统的条件表达式类.Linq.Expressions?

谢谢。

+0

.NET中没有内置的东西,你可以简单地将你的字符串输入并返回,这样做就可以完成。至少不是没有更多的工作。那里有图书馆,但是,这可能会给你你想要的。 –

+0

适用于Linq的对象或EF/SQL?如果这是EF,则可能需要使用[ObjectQuery上的QueryBuilder方法](http://msdn.microsoft.com/zh-cn/library/bb338811(v = vs.110).aspx)而不是解析字符串并手动生成表达式树。 –

回答

0

您可以使用Roslyn API(可在Nuget上找到)来编译此代码。 您可以使用包含该参数的对象作为会话主机对象,并使用SyntaxTree.ParseText为了从文本编译条件。 确保为用户不要在系统上运行危险代码验证树。 Roslyn很快将成为.NET框架的一部分,但现在它已经有了一个Nuget包。