質問: 私はソースからのデータを必要とするツールを書いています。このソースはユーザー指定であり、SQLバックエンド、独自のデータベース、フラットファイルシステムなど、ユーザーが知っているものである可能性があります。 Linqを使用するために、これらのタイプのクエリをフェッチするためのインターフェイスを使用したいと思っています。これは、最もC#の方が使いやすいと思われます。また、多くの.NETコードを活用できます。 私はいくつかの研究をしてきました。 ここでは、偉大なチュートリアルを通してIQueryProviderを構築しました 。それは私の道の大部分を得ていますが、ユーザーに式ツリーをカスタムコードに変換させる最善の方法については混乱しています。 私は、式ツリーをカスタム "コード"(つまり "SQL")にする方法をユーザーが指定するための簡単なインターフェイスを提供する最良の方法を理解しようとしています。それはむしろ面倒で複雑です。それはまさにそれです。 **私の質問は、式ツリーをカスタム言語に変換する最善の方法は何ですか?** 私は、私のカスタム構文解析ロジックを行うために 'Context'クラスを使用することですが、私が使用するAPIはかなり低いレベルのようです - 単純に操作を文字列にマップするための高レベル操作はありますか?
回答: 式ツリーをカスタムクエリ言語に変換するのは簡単で簡単な方法はありません。あなたはLinqExtenderに試してみたいかもしれません linqとdslの間の変換のためのvisitorパターンを実装しています。 > LinqExtenderはカスタムLINQプロバイダを構築するためのツールキットです。元のIQyeryableおよびIQueryProviderの実装よりも抽象化されたレイヤーを提供し、単純な構文ツリーを提供します。また、内部的には、投影、メソッド呼び出し、順序付け、メンバー解析なども扱います。したがって、開発者は主なタスクから複雑さを引いたものにもっと集中することができます > > 。