2009-09-18 1 views
6

Я уже просматривал SO и не мог заплатить за это работоспособное решение. Я просто пытаюсь понять, что такое синтаксис для нескольких внутренних объединений в Linq для Entities. БлагодаряКак вы выполняете множественные внутренние соединения в Linq для объектов

ответ

9

Ответ Джона будет работать, но IMHO using join in LINQ to Entities is usually wrong, потому что он дублирует код в вашей модели. Я могу переписать запрос Jon в намного более простым способом в L2E:

var query = from customer in db.Customers 
      from order in customer.Orders 
      from product in order.Products 
      from info in product.Info 
      select new 
      { 
       customer.Name, 
       info.BriefDescription 
      } 

Это около 50% от ввода и 0% дублированного кода. Подумайте, что ваши отношения уже определены в вашей базе данных и в вашей модели. Вы действительно хотите дублировать их снова в каждом запросе, который вы пишете, и прерывать свои запросы при реорганизации вашей модели?

+1

wow..хорошая точка – user161433

+3

@Craig - Хотел бы я понять, что я смотрю здесь пару часов назад. То, что я пропустил, было «от заказа в customer.Order» - я делал эквивалент «из порядка в db.Orders», что совершенно другое. Спасибо за это. – chris

+2

Это генерирует кросс-соединения в запросе ... – dudeNumber4

7

Ну, я не знаю, LINQ к Entities в частности, но нормальный синтаксис LINQ будет:

var query = from customer in db.Customers 
      join order in db.Orders on customer.ID equals order.ID 
      join product in db.Products on order.ProductID equals product.ID 
      join info in db.Info on product.InfoID equals info.ID 
      select new { customer.Name, info.BriefDescription }; 

(т.е. всего несколько join положений).

Теперь я подозреваю, что вы уже пробовали это - если да, то что пошло не так?

+1

Хотя это действительно работает, я считаю, что лучше использовать отношения вместо объединений в конкретном случае L2E. –

+0

Что касается случая, когда мы начинаем с пары данных Info-сущностей ('from info in db.Info, где информация ... join product ...'), не будут ли более явные написанные объединения более эффективными в этом случае ? Или это не имеет значения в EF и будет «от клиента в db.Customers от заказа в customer.Orders от продукта в order.Products от info в product.Info, где информация ...' быть столь же эффективным? – j00hi

+0

@ j00hi: Вы должны смотреть на генерируемый SQL. –

Смежные вопросы