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
...
}

基本上,我希望为每个寄售选择一行,并且我想选择应该是 POD 集合的对象“POD”。这可行,但是我为每个 POD 得到一行 - 因此,如果我在一个货物上有 3 个 POD,则将为该货物返回 3 行。我是否错误地选择了 POD?如果我拿走 DefaultIfEmpty(),它奇怪地工作正常并且不会导致重复。

4

1 回答 1

4

您正在使用第二个子句,它有效地使事物变平-from但是您仍在使用pg. select关键DefaultIfEmpty()是如果你想要一个有效的左外连接 - 你会期望每个有效组合有一个结果。

我怀疑你只是想要:

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()
  ...
}

PODs...但是当没有任何 POD 时,后者会给你一个带有单个空条目的结果,这可能不是你想要的。

于 2011-07-08T09:14:39.413 回答