C# 在多对一和一对多关系上实现LINQ到实体

C# 在多对一和一对多关系上实现LINQ到实体,c#,.net,linq,entity-framework,linq-to-entities,C#,.net,Linq,Entity Framework,Linq To Entities,我尝试使用Include扩展实现LINQ到实体 我有以下计划: 这是我的第一个LINQ(它工作正常): 这是我的第二个LINQ(不工作): 我的问题是,为什么当我在“多对一”关系上实现Linq时,Linq工作正常,而当我试图实现Linq“由内而外”(即一对多)时,它不工作?只是一个猜测,但是: ctx1.Orders.... //not ctx1.Order 第一个查询是有效的,因为每个订单细节只有一个相关订单-您从“n”的角度(订单细节)查看关系 在第二个查询中,您从订单和订单详细信息之

我尝试使用Include扩展实现LINQ到实体

我有以下计划:

这是我的第一个LINQ(它工作正常):

这是我的第二个LINQ(不工作):


我的问题是,为什么当我在“多对一”关系上实现Linq时,Linq工作正常,而当我试图实现Linq“由内而外”(即一对多)时,它不工作?

只是一个猜测,但是:

ctx1.Orders.... //not ctx1.Order

第一个查询是有效的,因为每个订单细节只有一个相关订单-您从“n”的角度(订单细节)查看关系

在第二个查询中,您从订单和订单详细信息之间的1:n关系中的“1”开始,并试图获得1单价-但是有一个集合()相关的联合价格和数量。只有当每个
订单
只有一个相关的
订单详细信息
时,您当前的方法才会起作用

如果要获取匿名类型中的相关单价和数量集合,可以执行以下操作:

 var query2 = ctx1.Order.Include("Order_Details").Select( o => new  
             { o.OrderID,
               o.CustomerID,
               UnitPrices = o.Order_Details.Select( od => od.UnitPrice),
               Quantities = o.Order_Details.Select( od => od.Quantity)
              });

斯宾德,在多重化之后,我又犯了两个错误。破碎机,谢谢你的回答。这真的让我停住了脚步,但是钢铁我错过了一些东西。在我第二次临场时,你写道结果是一个单价和一个数量。但是为什么???我没有在我的LINQ过滤器或扩展方法中使用.first()或.last()。我有点困惑,可能是因为我不太理解LINQ是如何工作的。那么,谢谢!我说你想得到一个单价——这就是为什么它不起作用——你把订单的细节当作一个单一的对象,但它是一个集合
 var query2 = ctx1.Order.Include("Order_Details").Select( o => new  
             { o.OrderID,
               o.CustomerID,
               UnitPrices = o.Order_Details.Select( od => od.UnitPrice),
               Quantities = o.Order_Details.Select( od => od.Quantity)
              });