3

コード:

var cons = from c in dc.Consignments
join p in dc.PODs ON c.ID equals p.Consignment into pg
from p in pg.DefaultIfEmpty()
...(other joins)...
select new {
...
PODs = pg
...
}

基本的に、委託品ごとに1つの行を選択し、PODのコレクションであるオブジェクト「POD」を選択します。これは機能しますが、PODごとに1つの行があります。したがって、委託品に3つのPODがある場合、その委託品に対して3つの行が返されます。PODを間違って選択していますか?DefaultIfEmpty()を削除すると、奇妙なことに正常に動作し、重複は発生しません。

4

1 に答える 1

4

from効果的に物事を平坦化する 2 番目の句を使用していますが、それでも. で使用pgしていますselect。ポイントはDefaultIfEmpty()、効果的に左外部結合が必要な場合です-有効な組み合わせごとに1つの結果が期待される場所です。

私はあなたがただ欲しいと思う:

var cons = from c in dc.Consignments
join p in dc.PODs ON c.ID equals p.Consignment into pg
select new {
  ...
  PODs = pg
  ...
}

または多分

var cons = from c in dc.Consignments
join p in dc.PODs ON c.ID equals p.Consignment into pg
select new {
  ...
  PODs = pg.DefaultIfEmpty()
  ...
}

...しかし、後者は、PODsPOD がなかったときに 1 つの null エントリを含む結果を返します。これは、おそらくあなたが求めていたものではありません。

于 2011-07-08T09:14:39.413 に答える