私が取り組んでいるプロジェクトでは、かなり奇妙なデータ ソースを使用する必要があります。「クエリ」を指定すると、DataTable が返されます。ただし、クエリは従来の文字列ではありません。それはもっと似ています...私が望む基準を定義する一連のメソッド呼び出しです。これらの行に沿ったもの:
var tbl = MySource.GetObject("TheTable");
tbl.AddFilterRow(new FilterRow("Column1", 123, FilterRow.Expression.Equals));
tbl.AddFilterRow(new FilterRow("Column2", 456, FilterRow.Expression.LessThan));
var result = tbl.GetDataTable();
本質的に、それはすべての標準的なもの (ブール演算子、括弧、いくつかの関数など) をサポートしますが、それを記述するための構文は非常に冗長で、日常の使用には不快です。
"Column1 = 123 AND Column2 < 456"
与えられた式 ( など) を解析し、それを上記の関数呼び出しに変換する小さなパーサーを作成したかったのです。また、そこにパラメータを追加できればいいので、インジェクション攻撃から保護されます。一番上の最後の小さな砂糖は、解析結果をキャッシュし、同じクエリが別のオブジェクトで再実行されるときにそれらを再利用できるかどうかです。
だから私は疑問に思っていました-これに使用できる既存のソリューションはありますか、それとも独自の式パーサーを展開する必要がありますか? それほど複雑ではありませんが、コーディングに 2 ~ 3 日かかり、修正するバグの山を節約できれば、それだけの価値があります。