ОБНОВЛЕНО: я пытаюсь преобразовать логику SQL ниже в код C #, используя LINQ, и у меня мало путаницы в том, как обрабатывать условия CASE WHEN и ELSE внутри оператора SELECT и функции DATEADD.
WITH tmp AS (
SELECT
ID,
StartDate AS ReportingDate,
IncrementYears,
IncrementMonths,
IncrementDays,
DATEADD(YEAR, 1, GETDATE()) AS EndDate
FROM TransactionDetailDateFrequency
UNION ALL
SELECT tmp.ID,
CASE WHEN
tmp.IncrementDays > 0
THEN DATEADD(YEAR,tmp.IncrementYears,DATEADD(MONTH,tmp.IncrementMonths,DATEADD(DAY,tmp.IncrementDays,tmp.ReportingDate)))
ELSE
EOMONTH(DATEADD(YEAR,tmp.IncrementYears,DATEADD(MONTH,tmp.IncrementMonths,tmp.ReportingDate)))
END AS ReportingDate,
tmp.IncrementYears,
tmp.IncrementMonths,
tmp.IncrementDays,
tmp.EndDate
FROM tmp
WHERE tmp.ReportingDate < tmp.EndDate)
select * from tmp
OPTION (MAXRECURSION 0)
Iдо сих пор,
var calculatedDate = DateTime.Now.AddYears(1);
var items = (from TDD in IngestionHubContext.TransactionDetailDateFrequency
select new { TDD.Id, ReportingDate = TDD.StartDate, TDD.IncrementYears, TDD.IncrementMonths, TDD.IncrementDays, EndDate = calculatedDate });
var Temp = items.Concat(from T in items
where T.ReportingDate < T.EndDate
select new
{
T.Id,
ReportingDate = T.IncrementDays > 0 ? T.ReportingDate.Value.AddYears(T.IncrementYears.Value).AddMonths(T.IncrementMonths.Value).AddDays(T.IncrementDays.Value):
T.ReportingDate.Value.AddYears(T.IncrementYears.Value).AddMonths(T.IncrementMonths.Value),
T.IncrementYears,
T.IncrementMonths,
T.IncrementDays,
T.EndDate
});
Может кто-нибудь подсказать, как я могу реализовать логику EOMONTH () в c # внутри LINQ
ОБНОВЛЕНО: я добавил выше запрос Linq, но получаюошибка в items.Concat - 'не содержит определения для concat и наилучшей перегрузки метода расширения.1012 * Любая помощь приветствуется.
Заранее спасибо.