Entity Framework 核心 JOIN 方法语法

Entity Framework Core JOIN with method syntax

我有一个简单的数据库结构如下

订单

订单号

订单项

OrderItemId |订单号 |书号 | OrderItemTypeId

图书

图书编号 |作者编号

我想要 select 一个特定的订单和与其关联的所有数据的 OrderItems 加上所售图书的作者。

context.Orders.Include(order => order.OrderItems)
                 .ThenInclude(orderItem => orderItem.Book)
                 .ThenInclude(book => book.Author)
              .Include(order => order.OrderItems)
                 .ThenInclude(orderItem => orderItem.OrderItemType)
              .Where(order => order.Id == 1); 

我卡住的地方是在这一行之后

 .ThenInclude(book => book.Author)

因为 lambda 现在将引用一本书,但我需要回到 OrderItem 级别以包含 OrderItemType。我似乎能够做到这一点的唯一方法是再次包含 OrderItems 以获得包含 OrderItemType 的访问权限。这似乎不正确,或者至少不是很优雅。有人能指出我使用方法语法的更好方法的方向吗?谢谢

实际上你的代码是正确的。 Include 从根实体重新开始定义包含,在您的情况下 context.Orders.

您可以在此处改进的地方:只有 non-collection 个项目,包括,它们可以通过完整路径定义:

context.Orders
    .Include(order => order.OrderItems)
        .ThenInclude(orderItem => orderItem.Book.Author)
    .Include(order => order.OrderItems)
        .ThenInclude(orderItem => orderItem.OrderItemType)
    .Where(order => order.Id == 1); 

ThenInclude(orderItem => orderItem.Book.Author) 将包括书籍和作者。