0

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

命令

订单编号

订单项

订单项 ID | 订单号 | 书名 | OrderItemTypeId

书名 | 作者 ID

我想选择一个特定的订单以及与其关联的所有数据,即 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 的访问权限。这似乎不正确或至少不是很优雅。有人能指出我使用方法语法的更好方法的方向吗?谢谢

4

1 回答 1

0

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

您可以在此处改进:仅包括非收藏项目,它们可以通过完整路径定义:

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)将包括书籍和作者。

于 2021-12-08T22:08:39.957 回答