将 Include() 重写为 linq 连接

本文关键字:linq 连接 重写 Include | 更新日期: 2023-09-27 18:36:56

由于(目前)不可能在编译的查询中使用 Include(),因此我正在尝试将它们重写为连接。但它似乎并没有像我想要的那样工作。

假设我有这种关系:

Order              OrderState
Id                 Id   
OrderStateId       Description

现在我曾经获取如下描述:

var q = (from o in context.Orders
         where o.Id = orderId
         select o).Include("OrderState");

我尝试将其重写为:

var q = (from o in context.Orders
         join st in context.OrderStates on o.OrderStateId equals st.Id
         where o.Id = orderId
         select o);

但是在我的结果集中,订单状态仍然是空的。我将如何解决这个问题(以一种编译查询可以接受的方式)?

将 Include() 重写为 linq 连接

如果你不能使用 .Include ,你需要在结果中的某个地方实际包含o.OrderState,那么这个怎么样?

var q = (from o in context.Orders
         where o.Id = orderId
         select new { Order = o, o.OrderState });

o.Order.OrderState应该连接到o.OrderState,而无需对q中的每个结果提供额外帮助。