LINQ Внутреннее соединение с левым внешним соединением, чтобы получить несоответствующие значения - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь преобразовать запрос ниже 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

Ожидаемый результат. Как и в приведенном выше снимке экрана, мне нужны значения, для которых Match равно NULL.

Надеюсь, это объясняет, чего я пытаюсь достичь.

Любая помощь приветствуется.

Заранее спасибо.

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