5

「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 '('

クエリ式の評価で行ったように。Expression tress が役立つ場合があります。しかし、どのように?この点で助けが必要です。

4

3 に答える 3

4

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);
}
于 2012-09-23T20:52:54.667 に答える
0

Visual Studio は、文字列が何を表しているかを実際には認識していないため、私の知る限り、文字列自体の中で解析は行われません。

通常、C# でプログラミングして SQL を使用する場合、C# 自体でできるだけ多くの計算を実行しようとします (可能であれば、テーブル全体を選択してから、C# を使用して結果を処理します)。

データベースが非常に遅い場合はよくあることですが、ハードコーディングされた文字列を処理する SQL Builder クラスを作成すると便利な場合があります。

これらの方法のどちらも使用しない場合、残念ながら本当に期待できるのは実行時例外です (これは明らかな理由で最適ではありません)。

編集: 私が提案した 2 番目のシナリオでは、SelectQueryBuilder ライブラリが既に存在しているようです。

于 2012-09-23T21:01:13.873 に答える