Быстрая загрузка сущностей в Linq2Sql

I’m trying to eagerly load an entity and its related properties (basic one to many) using the LoadWith and AssociateWith DataLoadOptions. However, after looking at the generated SQL I noticed that the statements generated by LoadWith are all Left Outer Joins.

Таким образом, приведенный ниже код генерирует все левые внешние соединения для получения данных связанных свойств. Это почему? И есть ли способ заставить LoadWith вместо этого генерировать внутренние соединения. Я знаю, что могу сделать это с помощью простого «Linq join», однако мне нравится, насколько понятен и прост синтаксис LoadWith. заранее спасибо

dataLoadOptions.LoadWith(Of TCustomer)(Function(c) c.Orders)
dataLoadOptions.LoadWith(Of TOrder)(Function(o) o.Products)
dataLoadOptions.LoadWith(Of TProduct)(Function(p) p.ProductTranslations)
dataLoadOptions.AssociateWith(Of TProduct)(Function(c) c.ProductTranslations.Where(Function(t) t.Language = "En"))

person dalcantara    schedule 03.08.2010    source источник
comment
Зачем тебе внутреннее объединение. Кажется вполне разумным, что LINQ to SQL генерирует внешние соединения, потому что при внутренних соединениях клиент, у которого нет заказов, не будет получен. Возможно, вам стоит объяснить, чего вы хотите достичь.   -  person Steven    schedule 03.08.2010
comment
Да, извините, я должен был быть более ясным. Я хочу вернуть все заказы Клиента, для которых существует перевод продукта на английский язык. Что касается внешнего соединения, я думаю, что Linq должен позволить мне явно создавать внешнее или внутреннее соединение. Извините, если это все еще непонятно.   -  person dalcantara    schedule 03.08.2010


Ответы (1)


все заказы Клиента, для которых существует перевод продукта на английский язык

dataLoadOptions.AssociateWith<TCustomer>(c => c.Orders
  .Where(o => o.Products
      .SelectMany(p => p.ProductTranslations)
      .Any(pt => pt.Language == "En")
  )
);
person Amy B    schedule 04.08.2010