1

私は PLINQO を初めて使用し、LINQ2SQL を初めて使用し、古い既存の DAL と並行して新しい DAL (DAL2 と呼ばれる) を追加しています。私たちの考えは、追加するすべての新しいものに linq2sql の使用を開始し、古い DAL の使用法を新しい DAL2 に徐々に移行し始めることです。

ご存知のように、DLINQ は単純なことには適していますが、より複雑なシナリオ (多対多、分離されたオブジェクトなど) では問題がすぐに発生し、それを回避する必要があります。PLINQO (CodeSmish と一緒に) が助けになり、必要なすべての構造とツールを追加して、より使いやすくします。ここまでは順調ですね。

今、私はすでに DAL2 を持っています (マネージャーを使用しています)。できます"。しかし、いくつか疑問があります。

次のクエリで構成されるオブジェクトを返すことを理解しています:

select name,  Count(*) as Total from SomeTable 

…ほとんどの DB アプリケーションで奇妙なシナリオではありません。クエリは、優れた匿名型となる単純な例です。

ここで、このようなテーブル構造を想像してみてください。

Tag (1) <—&gt; (n) PatientTag (n) <—&gt; (1) Patient

アイデアは、各タグに何人の患者がいるかを知ることです。タグと患者タグの間の単純な内部結合は、SQL でこれを修正します。そのために患者テーブルにアクセスする必要さえありません。(私はちょうどカウントが必要です)。

結局のところ、私が欲しいのは、たとえば次のとおりです。

タグ1、33

タグ2、21

タグ3、6

など…</p>

それを実行する linq2sql クエリを作成できたとします。

   var result1 = from pt in dc.PatientTag
                 join t in dc.Tag on pt.TagId equals t.TagId
                 select new { TagName = t.TagName };


   var result2 = from q in result1
                 group q by q.TagName into gp
                 select new { TagName = gp.Key, Total = gp.Count() };

(私はLINQに慣れていないので、上記が良くない場合は、「LINQissm」の不足を許してください)

その「新しい」匿名型を返すことができないことを考えると (私の意図ではないオブジェクトとリフレクションを使用しない限り)、2 つのもの (名前と合計) を含む「ヘルパー」クラスを作成する必要があると思います。上記のコードは、UI のコードではなく、データ層またはビジネス層のどこかに配置する必要があるという考えです。

今、本当の質問:

上記が当てはまる場合、(適切な表示と処理のために) その結果 (または結果の配列) を UI に返したい場合、その「ヘルパー」をどこに作成すればよいですか?

1) DAL2/Helper/TagNameTotal.cs で (例を挙げると)

2) BLayer/Helpers/TagNameTotals.cs で?

3) 上記のどれでもない? (またはどちらか?)

上記が当てはまらない場合、私は何を間違って考えていますか?

誰かがクエリの結果を UI に渡して変更したい場合、それは普通のことではありませんか? 上記の例で、UI の TagName を変更したいとします (これは最適な例ではありませんが、適用されます)。

すみませんが、Web プロジェクトや単純なアプリの外で使用する場合、LINQ2SQL 全体が少し粗雑であることがわかります。これらは、私たちが ADO​​.NET (およびそれ以前のレコードセット) でずっと行ってきた基本的なことです。

select/join/group/crazySQL を作成し、変更して、変更をコミットします。

PLINQO は、LINQ2SQL の煩わしさ (多くの 2 つの多く、切り離された、コンテキストの再生成、キャッシュなど) を取り除くため、優れていますが、それでも LINQ であるため、DLINQ のプラクティスを適用する必要があります。

私は何が欠けていますか?

: PLinq と PLinqO を混同しないでください。

4

2 に答える 2

2

codesmith communityでこの投稿に回答しましたが、これについて考えていて、この投稿に出会いました。この投稿が役立つかもしれません

基本的に、ミニクラスを作成し、letステートメントを使用してサブセットを定義し、必要なときに遅延ロードします....

于 2009-12-01T07:33:27.890 に答える
0

これは、PLinqO 製品の恥知らずなプラグインのように思えます。これがあなたの意図でないことを願っています。私は PLinqO を調べましたが、入手するには CodeSmith を購入する必要がなければ、おそらく入手できたでしょう。結構です。

L2S を使用してフル機能の 3 層プラットフォームを構築し、M:M 関係、切り離されたエンティティ (特に更新を伴う)、コンテキスト処理などに関連する問題に遭遇し、対処しました。PLinqO やその他のサードパーティ ツールは使用しませんでした。 . L2S がどのように機能するかを理解すれば、それを行うことができます。私たちのソリューションは非常に洗練されており、パフォーマンスも非常に優れていると思います。

これを読んでいる方で、サードパーティのツールにお金を使いたい場合は、LinqPad と Linqer に投資してください。これらのツールは両方とも合計 75 ドル未満で手に入れることができます。彼らは素晴らしいです。そして、私はそのどちらとも関係がありません。

ランディ

于 2009-11-26T14:21:11.787 に答える