2014-02-12 22 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包。