DefaultIfEmpty() в соединении LINQ to SQL вызывает дубликаты
Код:
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(), он странным образом работает нормально и не вызывает дубликатов.
1 ответ
Вы используете второй 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, что, вероятно, не то, что вы хотели.