実行時にプロシージャが「文字列」を解析して述語を返すという解決策を見つけようとしています。これまでのところ、私が見つけたのは、その仕事をするDynamicLinqクラス(サンプル)です。
私は疑問に思っています-同じようにODatalibを使用することは可能ですか?"odata"構造文字列( "?color ='red'&param = foo")を渡して、Linq述語を取得しますか?
ODataLib contribプロジェクトには、探しているものと同様のパーサーが含まれています。まだLINQ述語を生成せず、中間ASTのみを生成しますが、開始するための何かを提供する可能性があります。http://odata.codeplex.com/wikipage?title=ODataLib&referringTitle=Homeを参照してください(ライブラリは、codeplexのソースコードまたはnugetパッケージとして利用できますhttp://nuget.org/packages/Microsoft.Data.OData .Contrib)
パーサーを作成します。少数のよく知られたタイプの述語を解析している場合、これは実際にはかなり単純です。一般的に、それはおそらく反射を必要とし、それはそれをもう少し苦痛にしますが、元に戻すことはできません。
述語に変換する前に、おそらくそれをいくつかの中間形式に解析します。特定のクラスに対してこれを行う場合、最も簡単な方法は、それをそのクラスのインスタンスに解析し、一方のnull以外のプロパティを他方に対してチェックする比較クラスを作成することです。YMMV。
一般的には、おそらくそれをディクショナリなどに解析し、型のリフレクションを使用する比較クラスを記述します(これはパラメータの1つである必要があります)。