EF Core-我们可以在包含的项目列表中调用“包含”吗?

时间:2019-07-18 02:53:34

标签: c# .net-core ef-core-2.2

我有这个查询:

var orders1 = (from header in _context.SalesOrder.Include(nameof(SalesOrder.SalesOrderItem))
                                                    .Include(nameof(SalesOrder.Erp))
                                                    .Include(nameof(SalesOrder.OrderStatus))
                join orgNumber in _context.OrganizationNumber on header.CustomerNumber equals orgNumber.Number
                join userOrg in _context.UserOrganization on orgNumber.OrganizationId equals userOrg.OrganizationId
                where userOrg.UserId == userId && !header.Deleted && !orgNumber.Deleted && !userOrg.Deleted
                        && (header.OrderNumber == sopoNumber || header.CustomerPoNumber == sopoNumber)
                select GetSalesOrderModel(header)).AsNoTracking().ToList();

主表SalesOrderSalesOrderItem有一对多关系。和SalesOrderItem一样,SalesOrder的OrderStatus表也有FK。但是我不确定如何将Include添加到已经包含的SalesOrderItem列表中。是否可以直接在查询中添加它?我可以在填充模型对象之后执行此操作,但是想看看是否可以一次完成所有操作。

2 个答案:

答案 0 :(得分:1)

对每个子导航属性使用ThenInclude()。 参考:Loading Related Data - Including Multiple Levels

答案 1 :(得分:1)

所以这是与答案完全无关的另一件事,但是即使如此,我还是在这里将其发布给所有在包含和包含中苦苦挣扎的人

在EFCore include(x => x.Object)中。ThenInclude(y => y.Subobject)也可以很好地工作,但是vs智商可以做到这一点

因此,可以使用.Include(x => x.SalesOrderItem)

,而不是使用.Include(nameof(SalesOrder.SalesOrderItem))。

回到您的问题

这是下面的示例代码

 vmExecutionRepo.FilteredGet().Include(x => x.ProjectToProcess).Include(z => z.ProjectToProcess.Process)
            .Include(y => y.ProjectToProcess.Project)
            .Include(a => a.ProjectToProcess.Project.BotToWorkQueue).ThenInclude(v => v.BotToWorkQueueItem)

您还可以尝试类似的方法