Учитывая, что у меня есть три таблицы (Customer, Orders и OrderLines) в модели Linq To Sql, где
Клиент - Один ко многим -> Заказы - Один ко многим -> Строки заказа
Когда я использую
var customer = Customers.First();
var manyWay = from o in customer.CustomerOrders
from l in o.OrderLines
select l;
Я вижу, что один запрос получает клиента, это имеет смысл. Затем я вижу запрос для заказов клиента, а затем один запрос для каждого заказа, получающий строки заказа, а не объединяющий их. Всего n + 1 запросов (не считая получения клиента)
Но если я использую
var tableWay = from o in Orders
from l in OrderLines
where o.Customer == customer
&& l.Order == o
select l;
Тогда вместо того, чтобы видеть один запрос для каждого заказа, получающего строки заказа, я вижу один запрос, соединяющий две таблицы. Всего 1 запрос (не считая получения клиента)
Я бы предпочел использовать первый запрос Linq, так как он кажется мне более читабельным, но почему L2S не присоединяется к таблицам, как я ожидал в первом запросе? Используя LINQPad, я вижу, что второй запрос компилируется в SelectMany, хотя я не вижу изменений в первом запросе, не уверен, является ли это индикатором какой-либо проблемы в моем запросе.