などを使用してさまざまなFunc<>
デリゲートを生成するコードがいくつかあります。後で使用するために、生成された関数をアセンブリにシリアル化できるようにしたいと考えています。過去に私は System.Reflection.Emit でいくつかのことをしましたが、今では Linq Expressions でそのルートに再び行きたくありません。System.Linq.Expressions
Expression.Lambda<Func<>>.Compile()
Expressions
コンパイルされた式または名前空間から名前空間へのある種のブリッジをシリアル化するメカニズムはありEmit
ますか?
編集
コンテキストの背景: 私はクエリ エンジンに取り組んでいます (ほとんどの場合、私自身の教育と楽しみのためです)。SQL ステートメントが与えられた場合、それを解析してラムダ関数に変換し、後で (そして繰り返し実行するために) ディスクにシリアル化します。
疑似コードでは、私はこの時点までです:
Func<IEnumerable<T>, IEnumerable<T1>> query = Query.Parse<T, T1>("Select field AS A, field1 AS B from T where T.field2 > 5");
(ここで、field、field1およびfield2はT 型のプロパティであり、AおよびBはT1 型<T>
のプロパティです。また、 の列挙を渡してquery
取得し<T1>
、クエリ条件に一致する列挙を取得できます。
したがって、コンパイル済みのアセンブリとしてディスクにシリアル化したいので、後でそれを読み込んで、解析およびコンパイルせずにquery
さまざまなセットを評価できます。<T>
私は次の行に沿って何かを描いています:
AssemblyBuilder builder = new AssemblyBuilder(...);
ModuleBuilder module = builder.DefineDynamicModule(...);
TypeBuilder type = module.DefineType(...);
type.AddMethod(query); // <--- where this piece does not exist as far as I know
builder.Emit(...)