Есть много вопросов о SO уже о левых соединениях в Linq, и те, которые я просматривал, используют ключевое слово join
для достижения желаемого конца.Слева присоединиться к Linq?
Это не имеет смысла для меня. Предположим, у меня есть таблицы Customer
и Invoice
, связанные внешним ключом CustomerID
на Invoice
. Теперь я хочу запустить отчет, содержащий информацию о клиенте, а также любые счета-фактуры. SQL будет:
select c.*, i.*
from Customer c
left join Invoice i on c.ID = i.CustomerID
Из того, что я видел из ответов на SO, люди в основном предполагает:
var q = from c in Customers
join i in Invoices.DefaultIfEmpty() on c.ID equals i.CustomerID
select new { c, i };
Я действительно не понимаю, как это может быть единственным способом. Связь между Customer
и Invoice
уже определена классами LinqToSQL; почему я должен повторить его для предложения join
? Если бы я хотел получить внутреннее соединение, это было бы просто:
var q = from c in Customers
from i in c.Invoices
select new { c, i };
без указания объединенных полей!
Я пробовал:
var q = from c in Customers
from i in c.Invoices.DefaultIfEmpty()
select new { c, i };
но только дал мне тот же результат, как если бы это было внутреннее соединение.
Нет ли лучшего способа сделать это?
Ну удар меня - ты прав! Теперь, почему я думал, что это не работает ...? Хорошо, я смиренно отступаю ... этот вопрос возник из-за моего собственного недоразумения. БЛАГОДАРЯ! :) –