Я использую левое внешнее соединение LINQ в Entity Framework 7 RC1. Нам пришлось использовать обходной путь, поскольку левые соединения не реализованы должным образом, см. Левое внешнее соединение с ядром Entity Framework
var customers = from customer in _db.Customer
join postcode in _db.Postcode
on customer.PostcodeID equals postcode.PostcodeID into custPCTmp
from custPC in custPCTmp.DefaultIfEmpty()
select new
{
// Workaround for EF7 RC1.
Customer = customer,
CustPC = custPC
};
// Workaround for EF7 RC1.
model.CustomersList = new List<CustomerListItemViewModel>();
foreach (var cust in customers)
{
CustomerListItemViewModel custVM = new CustomerListItemViewModel()
{
CustomerID = cust.Customer.CustomerID,
Name = cust.Customer.Name,
Address = cust.Customer.Address,
Town = cust.CustPC == null ? string.Empty : cust.CustPC.Town,
Postcode = cust.CustPC == null ? string.Empty : cust.CustPC.Postcode
};
model.CustomersList.Add(custVM);
}
Я ожидаю такого результата (обратите внимание, что первые 3 строки должны иметь один и тот же город и почтовый индекс):
Name Address Town Postcode
---------------------------------------
Name 1 Address 1 Town 1 Postcode 1
Name 2 Address 2 Town 1 Postcode 1
Name 3 Address 3 Town 1 Postcode 1
Name 4 Address 4 Town 4 Postcode 4
Однако я получаю следующий результат (трижды дублирование первой записи):
Name Address Town Postcode
--------------------------------------
Name 1 Address 1 Town 1 Postcode 1
Name 1 Address 1 Town 1 Postcode 1
Name 1 Address 1 Town 1 Postcode 1
Name 4 Address 4 Town 4 Postcode 4
Я вижу, что это связано с присоединением клиента с почтовым индексом к PostcodeID, но почему он так дублируется? Данные в базе выглядят нормально.
С уважением,
Расика