[英]Evaluate Conditional Expression
我有一個場景,我將數據庫中的“if”條件保存為字符串。 例如:
String condition = "(([age] >= 28) && ([nationality] == 'US'))";
要么
String condition = "([age] >= 28)";
現在,我想評估用戶輸入條件語法正確。 這些是不正確語法的示例:
String condition = "(([age] >= 28) && ([nationality] == 'US')"; //Missed ')' bracket
String condition = "[age] >= 28)"; //Missed Opening bracket '('
就像我們在Evaluate Query Expression中一樣。 可能是表達發辮可能會有所幫助。 但是怎么樣? 在這方面需要幫助。
看看NCalc 。 它是評估數學表達式的框架。
當表達式有語法錯誤時,評估將拋出EvaluationException。
try
{
new Expression("(3 + 2").Evaluate();
}
catch(EvaluationException e)
{
Console.WriteLine("Error catched: " + e.Message);
}
但是,您還可以使用HasErrors()
方法在評估之前檢測語法錯誤。
Expression e = new Expression("a + b * (");
if(e.HasErrors())
{
Console.WriteLine(e.Error);
}
Visual Studio並不真正知道字符串代表什么,所以據我所知,字符串本身沒有解析。
通常在使用C#編程並使用sql時,您會嘗試在C#本身中盡可能多地進行計算(如果可行則選擇整個表,然后使用C#處理結果)。
如果數據庫非常慢,這種情況經常發生,編寫SQL Builder類來處理硬編碼字符串可能會很有用。
如果您不使用這些方法,遺憾的是您真正希望的最好的是運行時異常(由於顯而易見的原因,這不是最佳的)。
編輯:我建議的第二個場景似乎已經存在一個SelectQueryBuilder庫 。
我找到了這個解決方案
解:
string conditiontext = "(([age] >= 28) && ([nationality] == \"US\"))";
conditiontext = conditiontext.Replace("[age]", 32)
.Replace("[nationality]","US");
/*VsaEngine*/
var engine = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
/** Result will be either true or false based on evaluation string*/
var result = Microsoft.JScript.Eval.JScriptEvaluate(conditiontext, engine);
[注意:此接口已棄用。 但它評估任何算術表達式和c#表達式]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.