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)
将包括书籍和作者。
我有一个简单的数据库结构如下
订单
订单号
订单项
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)
将包括书籍和作者。