質問

LINQ クエリとラムダ式を動的に記述する最良の方法は何ですか?

エンドユーザーがビジネス ロジック ルールを設計でき、それを実行する必要があるアプリケーションを考えています。

初歩的な質問で申し訳ありませんが、経験からベストプラクティスを教えていただければ幸いです。

役に立ちましたか?

解決

Bart De Smet の投稿を読むこと以上にお勧めできません (http://community.bartdesmet.net/blogs/bart/)、彼はラムダに関しては本当に優秀です。

彼の最近のシリーズでは、次のような動的 Lambda について取り上げています。 http://community.bartdesmet.net/blogs/bart/archive/2008/08/26/to-bind-or-not-to-bind-dynamic-expression-trees-part-0.aspx

本当に美しいコードです。

他のヒント

もう 1 つの可能性は、スクリプト ランタイムをプログラムに統合して、ユーザーが DSL でビジネス ロジックを記述できるようにすることです。 アイアンパイソン 候補になるだろう。

ラムダを動的に生成する方法は 2 つあります。Reflection.Emit を試して IL (.Net バイトコード) を直接生成し、ラムダとして呼び出すか、System.CodeDom と Microsoft.CSharp.CSharpCodeProvider を使用して高レベルの構造からコードを生成することができます。何をしたいかは、ユーザーにこれをどのように入力してもらいたいかによって異なります。ユーザーに C# を記述してもらいたい場合は、組み込みのコンパイラーを使用するだけです。

Linq を動的に生成するのはもっと簡単になるはずです。実行時に LINQ クエリを式ツリーとして生成し、それを IQueryable に渡して実行できる必要があります。これについて詳しくは、IQueryable のドキュメントを参照することをお勧めします。もう 1 つの方法は、いくつかの linq クエリを事前に定義し、ユーザーがそれらをチェーンできるようにすることです。どの Linq クエリも次の Linq クエリで使用できる IEnumerable を返すため、これは機能するはずです。

ラムダ式は、System.Linq.Expressions 名前空間を介して簡単に作成できます。

System.Linq.Expressions 必要なものです。ユーザーが式ツリーの形式でクエリを動的に定義および構築できる優れた UI を作成しました。その後、これを Linq2SQL または選択したクライアントに渡すことができます。

「最善の方法」と言う意味がわかりません。達成したいことの簡単な例を提供することをお勧めします。動的 LINQ 式の作成は難しいことではありませんが、注意が必要です。

動的 linq 式作成の例を次に示します。

既存の Linq 式を作成するにはどうすればよいですか

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top