私が作業しているプロジェクトでは、むしろ奇妙なデータソースで作業する必要があります。私はそれに "クエリ"を与えることができ、それは私にDataTableを返します。しかし、クエリは従来の文字列ではありません。それは、私が望む基準を定義する一連のメソッド呼び出しのようなものです。これらの線に沿って何か:本質的にはC#:任意の文字列を式ツリーに解析するには?
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日のコーディングとバグ修正のために2〜3日節約できれば価値があります。
巨大に見えます。私の必要性は小さいです。 :P –
Ironyアセンブリのサイズは171 KBです(デバッグバージョン)。また、必要に応じてソースコードを利用できるので、アプリにコンパイルすることもできます。あなたのニーズに合わせて、それを使用するのは非常にシンプル(つまりコードはあまりない)でなければなりません。私は表現パーサー/エバリュエータープロジェクトでそれを使用しています。コードはほんの数百行にすぎませんが、私の表現言語はあなたが記述したものよりはるかに複雑です。一方、DLRは実際にはもう少し大きいですが、それは本当にあなたのためには必要ありません:) – OregonGhost