gpt4 book ai didi

c# - LINQ to SQL 连接中的 DefaultIfEmpty() 导致重复

转载 作者:行者123 更新时间:2023-11-30 15:43:39 25 4
gpt4 key购买 nike

代码:

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

基本上,我想为每个 Consignment 选择一行,并且我想选择应该是 POD 集合的对象“POD”。这行得通,但是我得到了每个 POD 的一行 - 所以如果我有 3 个 POD,那批 cargo 将被退回 3 行。我是否错误地选择了 POD?如果我去掉 DefaultIfEmpty(),奇怪的是它工作正常并且不会导致重复。

最佳答案

您正在使用第二个 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 时,这可能不是您想要的。

关于c# - LINQ to SQL 连接中的 DefaultIfEmpty() 导致重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6622282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com