2012-04-29 1 views
2

私はレポートエンジンを作成しています。より一般的なものにしようとする私の課題の1つは、クエリの柔軟性をユーザーに与える方法を見つけようとしていることです。私の提供する固定セットを使用するのではなく、後で半恣意的なラムダ式を使用するために、DBにどのように構築して保存することができますか?

たとえば、N行のオブジェクトを持つN個のセクションオブジェクトを持つDocumentオブジェクトがあるとします。

もっと静的な目標を持つコードでは、ドキュメントのリストとラムダ式でwhere句を使用するテキストを含む値を持つLineがあるセクションがあるドキュメントのリストを簡単に取得できます。

しかし、多くの(ほとんど無限の)表現が可能であるため、部分集合に限定するか、可能なすべてのパスをパラメータ化されたメソッドとしてエンコードする必要はありません。

文字列データからラムダ式を作成するにはどうすればよいですか(つまり、サーバーに効果的にPOSTすることで、柔軟に表現できるデータをPOSTする方法を意味します)、2) DBで後で使用するための式ですか?

POSTデータのときに式を構築して、その文字列情報をDBに格納して同じ処理を行うことができますが、現在は#1を達成する方法がわかりません。おそらく#1だけが本当に関係します。

提案がありますか?私はこれが理論上実行可能なものだと思っていますが、私は基本的なアプローチがはっきりしていません。

+0

同じ質問ですが、Wh​​ere節については:http://stackoverflow.com/questions/125400/generic-linq-query-predicate –

答えて

1

ない、これはあなたを助けるかどうかが、ここではカップルの提案がありますかどうかわから:

  1. は述語ビルダーを使用することを検討してください。そのアプローチに関する詳細はHere'sをご覧ください。

  2. 動的linqを使用することができ、後で使用するために通常の文字列と同じようにクエリをDBに保存できます。私はこのアプローチでの経験はありませんが、興味があればhereを読むことができます。

エンジンで幸運があり、面白いですね!

+0

読んでいただきありがとうございます。調査して報告します。 – Amasuriel

+0

ありがとうございます - 私はEFのようなLINQベースのプロバイダを使い続ける方法を探していましたが、チェーンの最後に列を選択する文字列を使用しました。 DynamicQueryはその仕事をしましたが、構文は少し厄介ですが、System.Ling.Dynamicを使用してください。 var items = db.AsQueryable().....( "new(Col1、Col2、Col3)")を選択します。 –

関連する問題