0

それは例です

SQL

create view v_join 
as select m.* , d.oneDetail from master m, detail d 
where m.key = d.key

LINQ

var view = from v in dc.v_join select new
{
   Master = ???? /// that is an issue, how can I construct the objects using same fields but from another query,
   Detail = v.oneDetail

};

foreach (var entry in view)
{
  Master mEntry =  entry.Master; // then we can use it, there are no problems
}

この状況はかなり頻繁に発生し、同じフィールドを使用して別のビューからオブジェクトを構築するためのトリッキーな方法があります。

C#側でこのような結合を行うと、パフォーマンスが低下したり、遅延読み込みの問題が発生したりします。とにかく、LINQは各詳細レコードをフェッチするために多くのクエリを発行しますが、パフォーマンスの観点からは受け入れられません。

明白な解決策があるに違いありません、私は誰も同じ問題に直面したとは信じられません。dc.Translateのようなすべての明白なソリューションはほとんど同じですが、私が必要としているものとは異なります。

感謝します。

4

5 に答える 5

1

from m in dc.Master join d in dc.Detail on m.Key = d.Key select new {m、d};

于 2009-07-07T14:35:05.440 に答える
0

私にはこれは奇妙に聞こえます。ビューを使用する理由は、生のモデルにもアクセスするのではなく、モデルに異なる「ビュー」を設定するためです。

本当に必要な場合は、LINQのmaster-detailテーブルに参加し続けることをお勧めします。loadWithOptionsを使用すると、遅延読み込みを取り除くことができます。正しく調整されている間、LINQはパフォーマンスの問題を解決する積極的な読み込みを実行できます。

于 2009-07-07T14:36:06.967 に答える
0

これはあなたのニーズを満たしていますか?

Master = new Master() { Field1 = v.Field1, Field2 = v.Field2, Field3 = v.Field3 }
于 2009-07-07T14:32:53.243 に答える
0

DataLoadOptionsとLoadWithを使用してみてください。http://dotnet.org.za/hiltong/archive/2008/02/12/lazy-loading-in-linq-loadwith-and-associatewith-dataloadoptions-part-1-loadwithを参照してください。 aspx

例えば

System.Data.Linq.DataLoadOptions dl = new System.Data.Linq.DataLoadOptions();
dl.LoadWith<Detail>( detail => detail.Master )
于 2009-07-07T14:40:00.127 に答える
0

dc.v_join select new { Master = new { Column1Name = v.masterColumn1, Column2Name = v.masterColumn2, ... }, Detail = v.oneDetail }; の v から実行できませんか? ?

于 2009-07-07T14:56:09.680 に答える