Почему LINQ-to-Entities генерирует дополнительное левое внешнее объединение - PullRequest
2 голосов
/ 22 июня 2011

Фон

У меня есть 2 таблицы: OrderItem и OrderItemValue. У OrderItem может быть 0 или 1 OrderItemPackageValue. Первичный ключ в обеих таблицах одинаков, и существует ссылка на внешний ключ от OrderItems к OrderItemPackageValue

* LINQ 1008 *

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), и похоже, что он генерирует дополнительное внешнее соединение , и я не могу понять, как от него избавиться.

1 Ответ

0 голосов
/ 22 июня 2011

Это ошибка; см здесь и здесь .

Обходной путь: попробуйте изменить отношения с 1 : Many на 0..1 : Many

...