在多对一和一对多关系上实现LINQ to Entity

时间:2011-12-11 01:35:28

标签: c# .net linq entity-framework linq-to-entities

我想使用Include扩展来实现LINQ to Entity。

我有以下方案:

enter image description here

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

   var query = ctx1.Order_Details.Include("Order").Select( o => new  
             { o.OrderID,
               o.ProductID,
               o.Order.OrderDate,
               o.Order.OrderNumber
              });

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

Error Cannot convert lambda expression to type 'string' because it is not a delegate type

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

2 个答案:

答案 0 :(得分:2)

第一个查询有效,因为每个订单明细只有一个相关的订单 - 您正在查看" n"的关系。透视(订单详情)。

在第二个查询中,您开始使用" 1"在Order和Order_Detail之间的1:n关系中,您试图获得一个单价 - 但是有一个集合(" n")相关联合价格和数量。您当前的方法仅适用于每个Order_Detail只有一个相关的Order

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

 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)
              });

答案 1 :(得分:0)

只是一个猜测,但是怎么样:

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