Я пытаюсь преобразовать запрос ниже SQL в LINQ,
SELECT
TD.*, RD.*
FROM
dbo.TransactionDetail TD
INNER JOIN
dbo.Measure M ON M.InternalID = TD.MetricCode
LEFT OUTER JOIN
(SELECT
tmp.ID, tmp.ReportingDate, 1 AS Match
FROM
tmp) AS RD ON RD.ID = M.Frequency
AND RD.ReportingDate = TD.ReportingDate
WHERE
RD.Match IS NULL
AND TD.BatchID = 'e07f9855-b286-4406-9189-5cfb2a7914c8'
Мой запрос Linq выглядит следующим образом:
Обновление: добавлено определение td и rd
var rd = (from tt in result
select new { ID = tt.Id, tt.ReportingDate });
// inner join
var td = TransactionDetail.Join(
MesureTb,
t => t.MetricCode,
m => m.InternalId,
(t, m) => new
{
t.Id,
t.RowAction,
t.BatchId,
t.TrustCode,
t.MetricCode,
t.ReportingDate,
t.Value,
t.UpperBenchmark,
t.LowerBenchmark,
m.InternalId,
Frequency = m.Frequency
});
var result2 = from a in td//inner join already done in previous step
join b in rd
on new { ReportingDate = (DateTime)a.ReportingDate, ID = a.Frequency } equals new { b.ReportingDate, b.ID } into j
from b in j.DefaultIfEmpty()
where b == null && a.BatchId == batchId
select a.Id;
Может ли кто-нибудь помочь мне, как я могу написать это простым и эффективным способом? Это в основном выбор несоответствующих строк, где Match = null
Обновить :
ТД в Линке содержит список отчетных дат с 2009 по 2021 год.
Правая таблица RD - это справочная таблица со значениями дат в период между 2010 и 2020 годами.
Ожидаемый результат: запрос должен возвращать значения из таблицы TD с отчетной датой <2010 и> 2020
Пример ниже:
![enter image description here](https://i.stack.imgur.com/7kYw6.png)
Ожидаемый результат. Как и в приведенном выше снимке экрана, мне нужны значения, для которых Match равно NULL.
Надеюсь, это объясняет, чего я пытаюсь достичь.
Любая помощь приветствуется.
Заранее спасибо.