C# 实体框架Linq查询无关子表

C# 实体框架Linq查询无关子表,c#,linq,entity-framework,C#,Linq,Entity Framework,我使用实体框架6.1.3生成实体和数据模型 如果我有两个表:Orders->OrderDetails,它们之间有一个关系(OrderId),那么我可以通过以下查询获得所有订单和相关的OrderDetails dbContext.Order().Include(a => a.OrderDetails); 但是如果我为订单创建了一个视图(vOrder),那么模型中vOrder和OrderDetails之间没有直接关系,尽管我可以通过OrderId上的连接将它们链接在一起。我怎样才能从vOrd

我使用实体框架6.1.3生成实体和数据模型

如果我有两个表:Orders->OrderDetails,它们之间有一个关系(OrderId),那么我可以通过以下查询获得所有订单和相关的OrderDetails

dbContext.Order().Include(a => a.OrderDetails);
但是如果我为订单创建了一个视图(vOrder),那么模型中vOrder和OrderDetails之间没有直接关系,尽管我可以通过OrderId上的连接将它们链接在一起。我怎样才能从vOrder和相关OrderDetails获得所有数据。除非我手动添加所有导航属性,否则以下查询不起作用

dbContext.vOrder().Include(a => a.OrderDetails);
是否有一个简单的LINQ查询来完成预期的查询


感谢您的帮助。

手动加入并返回一个包含这两者的匿名对象

比如:

dbContext.vOrder
  .GroupJoin(
    dbContext.OrderDetails,
    v=>v.orderid,
    od=>o.orderid,
    (v,od)=>new {v=v,od=od});

当然,您可以将适当的导航属性添加到vOrder上,并完全按照您所说的操作。

为什么不在视图中包含更多列(或者创建另一个包含所有必需数据的视图,如果您不想修改第一个数据)?

非常感谢,它正在工作。我可能也会尝试在视图中添加导航属性,看看哪个更好。我想您会发现添加导航属性会更好,因为它可以在整个项目中重复使用,并大大简化查询。我建议从vOrder到Order的导航属性。如果您愿意,您可以随时从Order的导航属性中获取详细信息。导航属性就像街道标志,向开发人员显示“转到这里获取我的详细信息数据”,因此它们通常会减少代码,但ORM或RDBMS导航属性通常会获得额外的好处,如索引。导航属性提供可重用代码和可重用代码模式,当您确定在两个实体之间导航的最佳方式时,请使用它们视图和详细信息表之间存在一对多关系。