Подтвердить что ты не робот

LINQ Include vs Join. Они эквивалентны?

Я использовал объединение в linq для объединения двух таблиц. В чем разница между соединением и Include. Из того, что я вижу, они оба ведут себя одинаково.

    Include vs. Join
4b9b3361

Ответ 1

An Included предназначен для сохранения исходных структур объектов и графиков. Объединение необходимо для проектирования сплющенного представления графа объектов или для объединения типов, которые не связаны естественным образом через график (т.е. Присоединяются к городу клиента с городом доставки).

Сравните следующее: db.Customers.Include("Orders") Создает граф объектов следующим образом:

Customer
   Order
   Order
   Order

В отличие от этого, если вы делаете то же самое с объединением, проецирующимся в анонимный тип, вы можете получить следующее:

from c in db.Customers 
join o in db.Orders on c.CustomerId equals o.CustomerId 
select new {c, o}

// produces new Anonymous<Customer, Order> 

Хотя оба варианта могут выдавать один и тот же запрос в базу данных, результирующий тип может быть совсем другим.

Ответ 2

В некотором смысле, да. Include реализуется как объединение. В зависимости от недействительности включенной ссылки это внутреннее или левое соединение.

Вы всегда можете создать включить себя, используя соединение, например:

db.Users.Select(u => new { u, u.City })

Это "включить" для города пользователя. Он проявляет себя как соединение SQL.