質問

私はPLINQOが初めて、I’ LINQ2SQLがかなり新しく、古いDALと並行して新しいDAL(DAL2と呼ばれる)を追加しています。私たちのアイデアは、新しいものを追加するたびにlinq2sqlの使用を開始し、古いDALの使用を新しいDAL2に徐々に移行することです。

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

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

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

select name,  Count(*) as Total from SomeTable 

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

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

Tag (1) <—> (n) PatientTag (n) <—> (1) Patient

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

結局のところ、私が望むのはたとえば:

TAG1、33

TAG2、21

TAG3、6

etc&#8230;

それを行う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が初めてなので、上記が良くない場合、&#8220; LINQissm&#8221;の不足を許してください)

&#8220;新品&#8221;匿名型(オブジェクトとリフレクションを意図していない場合を除く)、&#8220;ヘルパー&#8221;を作成する必要があると思います2つのもの(名前と合計)を含むクラス。上記のコードは、データレイヤーまたはビジネスレイヤーのどこかに配置し、UIのコードには 配置しないでください。

今、本当の質問:

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

1)DAL2 / Helper / TagNameTotal.csに(例を挙げるために)

2)BLayer / Helpers / TagNameTotals.cs ??

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

上記がそうではない true の場合、間違って考えていることは何ですか?

誰かがクエリの結果をUIに渡して変更したいのは普通ですか?上記の例では、UIでTagNameを変更したいと考えています(これは最良の例ではないかもしれませんが、当てはまります)。

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

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

PLINQOはLINQ2SQLの手間をその粗い形式(多くの2多く、切り離された、コンテキスト再生成、キャッシュなど)で取り除くので便利ですが、それでもLINQなので、DLINQプラクティスを適用する必要があります。

不足しているものは何ですか?

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

役に立ちましたか?

解決

codesmithコミュニティでこの投稿に回答しましたが、これについて考えて、この投稿に出会いました。 こちらのヘルプを投稿

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

他のヒント

これは、PLinqO製品の恥知らずなプラグのように聞こえます。これがあなたの意図ではないことを願っています。私はPLinqOを見て、おそらくそれを手に入れるにはCodeSmithを購入しなければならないことを除けば、それを手に入れたでしょう。ありません。

Lサードパーティのツール。 L2Sの仕組みを理解したら、それを行うことができます。私たちのソリューションは非常にエレガントで、パフォーマンスは非常に優れていると思います。

これを読んでいる人のために、サードパーティのツールにお金をかけたいなら、LinqPadとLinqerに投資してください。これらのツールは両方とも合計75ドル未満で購入できます。彼らは素晴らしいです。そして、私はそれらのいずれにも関連付けられていません。

ランディ

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