基本的に、私は複数のテーブルのデータを集約して単一のテーブルに結合したレポートタイプのクエリを作成しています。Linq to SQL:グループ化されたセットを結合すると、クロス適用/外部適用が行われます。
それは少し次のようになります。
var docs = from x in DB.Docs
group x by x.PersonId into g
select new {
g.Key,
totalSent = g.Sum(x => x.SentDate.HasValue ? 1 : 0),
lastSent = g.Max(x => x.SentDate)
...
};
var summary = from x in DB.People
from y in docs.Where(y => y.Key == x.Id).DefaultIfEmpty()
select new {
x.Id,
x.Name,
y.totalSent,
y.lastSent
}
私はこれがdocs
の結果にDB.People
に参加しましたが、代わりに、私はいくつかのクレイジーCROSS APPLY((SELECT NULL AS [EMPTY]) as [t1] OUTER APPLY ...
のものを得る左のSQLを作成することを期待します。
私は考えることができる左の結合構文のすべての変種を試しました。私はdocs
を別のクエリーにラップしても、同じことが起こります。
私には何が欠けていますか?
あなたが望む結果を取得されていません
はおそらく、あなたが参加するためのもの? 「CROSS APPLY」は狂っているように思えるかもしれませんが、LINQ to SQLはSQLよりも賢くて、結果が正しいとすればそのことをやります。 – shaunmartin
結果は決して戻ってこない...「OUTER APPLY」は基本的に私のグループ化されたセットを 'DB.People'の各行のテーブル値関数にします。クエリがタイムアウトします。 –