私は PLINQO を初めて使用し、LINQ2SQL を初めて使用し、古い既存の DAL と並行して新しい DAL (DAL2 と呼ばれる) を追加しています。私たちの考えは、追加するすべての新しいものに linq2sql の使用を開始し、古い DAL の使用法を新しい DAL2 に徐々に移行し始めることです。
ご存知のように、DLINQ は単純なことには適していますが、より複雑なシナリオ (多対多、分離されたオブジェクトなど) では問題がすぐに発生し、それを回避する必要があります。PLINQO (CodeSmish と一緒に) が助けになり、必要なすべての構造とツールを追加して、より使いやすくします。ここまでは順調ですね。
今、私はすでに DAL2 を持っています (マネージャーを使用しています)。できます"。しかし、いくつか疑問があります。
次のクエリで構成されるオブジェクトを返すことを理解しています:
select name, Count(*) as Total from SomeTable
…ほとんどの DB アプリケーションで奇妙なシナリオではありません。クエリは、優れた匿名型となる単純な例です。
ここで、このようなテーブル構造を想像してみてください。
Tag (1) <—> (n) PatientTag (n) <—> (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 を混同しないでください。