質問

私のクラス定義 (プロパティとしてオブジェクト参照を持たない) だけを使用して、翻訳された SQL を提供できる愚かな LINQ プロバイダーを作成できたら、どんなに簡単でしょう。プロパティと列の名前、およびクラスと基になるテーブルの名前が同じであると想定できます。いくつかのヒントを教えてください。

役に立ちましたか?

解決

これは、LINQの全体のスペックを実現し、安定した作業プロバイダを構築するためにフルタイムの仕事の約4ヶ月(1日8時間)かかりました。あなただけの私が言うラフな何かを探しているなら、あなたはおそらくどのように良いに応じて、二ヶ月に一週間までから何かを見ているので、私は、私は約3週間後に非常に単純な、バギーや不安定なバージョンを持っていたと言うでしょうであり、あなたはrequiementsのどのような種類があります。

私はこのための気まぐれブログにあなたを指している必要があり、マットは、LINQプロバイダを実装すると、あなたはおそらく、コピー&ペーストできるようにするつもりはない場合でも、それはあなたを助ける方法については本当に良いチュートリアルを書いています作業しているときだと思う方法でグリップを取得します。あなたはここにMatt'sのチュートリアルを見つけることができます:<のhref =「http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx」 REL = "noreferrer"> http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx を。私はあなたがそれについてマットが行うのと同じ道を行く、とマットは彼のチュートリアルの第二部に含まれる式ツリーの訪問者を延長お勧めします。

私はこれで働き始めたとき、

また、私はあなたがLINQクエリに解析されたどのように見ることができたら、それは本当に簡単に全体の多くを解析作られた、式ツリービジュアライザからそんなに助けを持っていました。

プロバイダの構築にも時には少しイライラ場合は、本当に多くの楽しみです。私はあなたの運のすべてのベストを希望!

他のヒント

LINQExtender のプロジェクトに外観を与える、カスタムLINQプロバイダを作成するためのツールキットです。

あなたの脚アップを与えるための別のオプションは、<のhref = "https://www.re-motion.org/blogs/mix/archive/2009/09/02/how-to-write-aのようです-linq-プロバイダ-単純way.aspx」のrel = "nofollowを" タイトル= "カスタムLINQプロバイダを作成するためのフレームワークで再LINQ">再LINQするます。

ここでのソースコードと1を書くことに関与しているものの素敵な概要(PDF)の。

私は、LINQ-to-SQL プロバイダーをゼロから開発した経験に基づいて、式ツリーの構成段階 (LINQ メソッドの呼び出し) から始まり、式ビジターを続け、クエリを分解するチュートリアル シリーズをブログに書きました。コンポーネントに変換し、where 句を解析し、テキストとパラメーターを生成し、最終的には .NET 式名前空間を使用して全体を IL にコンパイルします。

プロバイダーの作成方法を説明すると約束し、的外れで、ほんの表面をなぞるだけで、実際にはリモートで実行可能なものを何も提供していない、不完全な投稿を多く見てきました。

私の経験に基づいて書いたブログ シリーズには、チュートリアルの例で必要な機能のみをカバーするシンプルなプロバイダーでダウンロードできるサンプル プロジェクトがあります。ただし、これには、多数の操作 (where、join、first、count、top など)、サブクエリ、ネストされたステートメントなどをサポートする製品バージョンも含まれています。さらに、エンティティや LINQ-to-SQL で見た多くのものよりもクリーンな SQL が生成されます。すべてを括弧で囲むなどの不必要な/冗長なネストはありません。

十分なレベルの抽象的思考を持っている人にとって、このようなプロバイダーの開発は、多くの人が考えるほど難しい作業ではありません。約 3 か月のパートタイム作業 (夜間と週末を意味します) で、実稼働環境で使用されるものを開発しました。最初からパフォーマンスと整った SQL を念頭に置いており、その目標は達成されました。

この資料を公開する時間を見つけるのは少し大変でしたが、もし誰かの役に立つのであれば、この経験を無駄にする必要はないと思いました。

私はそれが非常に非常に簡単に実装できるように設計されたプロジェクトの LinqToAnythingする」を作成しました(シンプル)のLINQプロバイダ

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