До сих пор я видел много ТАКИХ вопросов о множественных внутренних соединениях, но ни один из них не решил мои проблемы.Я пытался выполнить внутреннее объединение для 2 таблиц и подвыбрать в третьей таблице, используя одну из предыдущих таблиц.
Вот код sql:
SELECT
//It's a lot of select fields here. Nothing really useful to solve the problem
FROM
SCHEDULES
INNER JOIN
STATUS
ON
SCHEDULES.COMPANY = STATUS.COMPANY AND
SCHEDULES.BANK = STATUS.BANK AND
SCHEDULES.PRODUCT = STATUS.PRODUCT AND
SCHEDULES.IDSTRING = STATUS.IDSTRING AND
SCHEDULES.RECEIVER = 'ADMILSONDAMASCENO' AND
SCHEDULES.SCHEDULING < GETDATE() AND
SCHEDULES.IDSTRING IN (
SELECT DISTINCT IDSTRING FROM DEBTS_BBRASIL WHERE
DEBITOS_BBRASIL.COMPANY = SCHEDULES.COMPANY AND
DEBITOS_BBRASIL.BANK = SCHEDULES.BANK AND
DEBITOS_BBRASIL.PRODUCT = SCHEDULES.PRODUCT AND
DEBITOS_BBRASIL.IDSTRING = SCHEDULES.IDSTRING AND
DEBITOS_BBRASIL.STATUS <> 2
)
ORDER BY SCHEDULES.SCHEDULING DESC
И вот чтоя пытался сделать с linq to sql:
from sched in SCHEDULES
join status in STATUS
on new { sched.IDSTRING, sched.COMPANY, sched.BANK, sched.PRODUCT }
equals new { status.IDSTRING, status.COMPANY, status.BANK, status.PRODUCT }
into schedStats
from ss in schedStats
join debt in DEBITOS_BBRASILs
on new { ss.IDSTRING, ss.COMPANY, ss.BANK, ss.PRODUCT }
equals new { debt.IDSTRING, debt.COMPANY, debT.BANK, debt.PRODUCT }
where sched.RECEIVER.Equals("ADMILSONDAMASCENO") &&
sched.SCHEDULING <= DateTime.Now && debt.STATUS != 2
select new ScheduledStatus
{
//Lots of properties here
};
Этот код выше, однако, производит Cross-Join
, а затем Inner-Join
, что, я уверен, дублирует некоторые результаты.Тестирование первого кода на SqlServer дает 189 результатов, в то время как мой код linq to sql дает 546 результатов.Я не знаю, как воспроизвести один и тот же SQL-код для LINQ-SQL-кода.
Я проверил его оба на linqPad, чтобы быть уверенным.