C# 在多对一和一对多关系上实现LINQ到实体
我尝试使用Include扩展实现LINQ到实体 我有以下计划: 这是我的第一个LINQ(它工作正常): 这是我的第二个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”的角度(订单细节)查看关系 在第二个查询中,您从订单和订单详细信息之
我的问题是,为什么当我在“多对一”关系上实现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)
});