【问题标题】:Why is LINQ-to-Entities is generating an extra left outer join为什么 LINQ-to-Entities 会生成额外的左外连接
【发布时间】:2011-09-20 13:55:31
【问题描述】:

背景

我有 2 个表:OrderItem 和 OrderItemValue。一个 OrderItem 可以有 0 个或 1 个 OrderItemPackageValue。两个表中的主键相同,并且存在从 OrderItems 到 OrderItemPackageValue 的外键引用

LINQ

var dummy = 
    from orderItem in context.OrderItems
    select new 
    {
        OrderID = orderItem.OrderID,
        LineNumber = orderItem.LineNumber,
        PackageValue = (decimal?)orderItem.OrderItemPackageValue.PackageValue
    };

var dummy2 = dummy.ToArray();

SQL

   SELECT 
   [Extent1].[OrderID] AS [OrderID], 
   [Extent1].[LineNumber] AS [LineNumber], 
   [Extent3].[PackageValue] AS [PackageValue]
   FROM   [dbo].[OrderItems] AS [Extent1]
   LEFT OUTER JOIN [dbo].[OrderItemPackageValues] AS [Extent2] ON ([Extent1].[OrderID] =   [Extent2].[OrderID]) AND ([Extent1].[LineNumber] = [Extent2].[LineNumber])
   LEFT OUTER JOIN [dbo].[OrderItemPackageValues] AS [Extent3] ON ([Extent2].[OrderID] = [Extent3].[OrderID]) AND ([Extent2].[LineNumber] = [Extent3].[LineNumber])

我正在尝试通过 Linq2Entities (MSSQL) 获取它,它似乎正在生成一个额外的外部连接,我不知道如何摆脱它。

【问题讨论】:

    标签: linq sql-server-2008 linq-to-entities outer-join


    【解决方案1】:

    这是一个错误;见herehere

    解决方法:尝试将您的关系从 1 : Many 更改为 0..1 : Many

    【讨论】:

    • 关系是1到0..1
    • @Adam:试试0..1 : 0..1,如果可能的话?还是Many : 0..1?同样,这只是一种解决方法,因为这应该在下一个版本中修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多