簡體   English   中英

評估條件表達式

[英]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庫

我找到了這個解決方案

評估存儲在字符串中的算術表達式(C#)

解:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM