2009-08-20 8 views
2

私が十分に欲しがっていたら、LINQ-to-SQLに追加のLINQ構造を追加できますか?(私自身のLINQプロバイダを作成することは可能でしょうか?)たとえば、組み込みのLINQ演算子(XYZ.Any())の多くはSQL(例:​​)に直接変換されます。LINQ-to-SQLがサポートする演算子を拡張できますか?

特殊な構成が必要だった場合でも、そのセットを拡張することはできますか、それとも実際のLINQ-to-SQLプロバイダーに焼き付ける必要がありますか?

新しい演算子の実装を追加するにはどうすればよいですか? C#の拡張メソッドは、仕事をするのに十分なフックですか?

回答が「はい」の場合、LINQ-to-SQLによって生成された動的SQLを使用してsproc機能の多くを(すべて?)置き換えることができますか?

答えて

1

理論的には、任意の式のサポートをLINQプロバイダに追加できますが、PavelはLINQ to SQLが出発点として機能しないという点で正しいです。私は、開発中のLINQプロバイダを持っているSubSonicまたはNHibernateを調べます。プロバイダが式をサポートしたら、IQueryable<T>に対応する拡張メソッドを作成する必要があります。詳細はSystem.Linq.Queryableを反映してください。

言い換えれば、表現木を解析することは間違いなく心の弱いことではありません。 AST理論に本当に関心がない限り、OSS ORMを「通常の」方法で拡張する方が簡単かもしれません。

+0

私は物事のAST解析/式ツリーの終わりから何が得られるだろうかと非常に精通しています。私は実際にはまだ正確な必要性を持っていないが、主に将来の使用法について疑問を持っていた。 LINQで*すべて*を表現できるのであれば、本当にクールなモデルなので、あまりにも悪いです。 SubSonic&NHibernateについて言及すると、拡張子を許可するか、あるいは私が必要とするものを持つ可能性がある別のプロバイダと同じことができるからですか? – mckamey

+0

私はSubSonicやNHibernateの組み込み式の拡張性は認識していませんが、ソースをダウンロードして独自に追加するオプションがあります。 LINQで_everything_を表現するのが魅力的ですが、単純にうまくマップできないSQL構文がいくつかあります。これは、.NET 4で拡張されたExpressionサポートで変更される可能性があります。 – dahlbyk

1

いいえ、LINQ to SQLはそのように拡張できません。あなたができることは、ストアドプロシージャを使うことです。

関連する問題