синтаксис запроса с левым объединением не включает все свойства навигации - PullRequest
0 голосов
/ 06 ноября 2018

Я использую Ef Core version 1.1.2, у меня есть такой метод:

var query = _context.OrderItems
            .Include(ff => ff.ProductPackageOrderItem).ThenInclude(ff => ff.ProductPackage)
            .ThenInclude(ff => ff.Product)
            .Include(ff => ff.ChildrenOrderItems)
            .Include(ff => ff.ServiceOrderItem)
            .ThenInclude(ff => ff.CustomerService).ThenInclude(ff => ff.Package)
            .Include(ff => ff.InvoiceItems)
            .ThenInclude(ff => ff.InvoiceItem)
            .ThenInclude(ff => ff.InvoiceItemDiscountLogs)
            .Include(ff => ff.InvoiceItems)
            .ThenInclude(ff => ff.InvoiceItem)
            .ThenInclude(ff => ff.InvoiceItemTaxLogs)
            .Where(dd =>
                dd.OrderId == orderId);
        return query.ToList();

из-за ошибки, я думаю, что в этой версии, которую я использую, я выбрасываю исключение, теперь я хочу изменить его на запрос Linq, для этого у меня есть это, но у него есть некоторые проблемы

 var result = (from oi in DataContext.OrderItems.Include(o => o.ChildrenOrderItems)
                      .Include(ff => ff.InvoiceItems).ThenInclude(ff => ff.InvoiceItem).ThenInclude(ff => ff.InvoiceItemDiscountLogs)
                      join soi in DataContext.ServiceOrderItems.Include(ff => ff.CustomerService).ThenInclude(ff => ff.Package).ThenInclude(ff => ff.Product) on oi.Id equals soi.OrderItemId
                      join ii in DataContext.OrderItemInvoiceItems.Include(ff => ff.InvoiceItem).ThenInclude(ff => ff.InvoiceItemDiscountLogs) on oi.Id equals ii.OrderItemId
                      join oiii in DataContext.OrderItemInvoiceItems.Include(ff => ff.InvoiceItem).ThenInclude(ff => ff.InvoiceItemTaxLogs) on oi.Id equals oiii.OrderItemId
                      join ppoi in DataContext.ProductPackageOrderItems.DefaultIfEmpty().Include(ff => ff.ProductPackage).ThenInclude(ff => ff.Product) on oi.Id equals ppoi.OrderItemId
                      where oi.OrderId == orderId && oi.Type == OrderItemType.CustomerService && !oi.IsDeleted
                      && !oi.ServiceOrderItem.IsDeleted
                      && !oi.ServiceOrderItem.CustomerService.IsDeleted
                      && oi.ServiceOrderItem.CustomerService.Id == customerServiceId
                     select oi).ToList();
        return result;

1. Он ничего не возвращает, потому что некоторые записи не имеют ProductPackageOrderItems. 2. InvoiceItemTaxLogs и InvoiceItemDiscountLogs равны нулю, хотя у них есть данные в базе данных.

...