【问题标题】:Implementing LINQ to Entity on many to one and one to many relationship在多对一和一对多关系上实现 LINQ to Entity
【发布时间】:2011-12-11 01:35:27
【问题描述】:

我正在尝试使用包含扩展来实现 LINQ to Entity。

我有以下方案:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    第一个查询有效,因为每个订单详细信息只有一个相关订单 - 您正在从“n”角度(订单详细信息)查看关系。

    在第二个查询中,您从 Order 和 Order_Detail 之间的 1:n 关系中的“1”开始,并且您试图获得 一个 单价 - 但有一个 集合(“n”)相关的统一价格和数量。只有当每个 Order 都只有一个相关的 Order_Detail 时,您当前的方法才有效。

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

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

    【讨论】:

    • BrokenGlass,谢谢你的回答,它真的让我失望了,但是我错过了一些东西。在我的第二个 LINQ 中,你写了这个结果,得到一个 UnitPrice 和一个 Quntity。但是为什么?我没有在我的 LINQ 过滤器或扩展方法中使用,如 .first() 或 .last()。我有点困惑,可能是因为我不正确理解 LINQ 的工作原理。谢谢!
    • 我说你试图得到一个 UnitPrice - 这就是它不起作用的原因 - 你将 Order_Details 视为一个对象,但它是一个集合
    【解决方案2】:

    只是猜测,但如何:

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

    【讨论】:

    • spender,复数后我又犯了两个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 2023-04-05
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    相关资源
    最近更新 更多