Передать группу по ключам в качестве параметров DbFunction в Entity Framework Core - PullRequest
0 голосов
/ 18 февраля 2020

Я создал пользовательскую функцию DbFunction GetGregoryDate для преобразования персидской даты в Oracle дату (григорианская). Когда я выполняю следующее LINQ:

public async Task<IList<VehicleTrafficReportDto>> GetDistanceReport()
{
    var query = _context.VehicleDistanceView.AsQueryable()
        .GroupBy(m => new
        {
            m.PersianYear,
            m.PersianMonth,
            m.PersianDay,
            m.VehicleId
        })
        .Select(s => new VehicleTrafficReportDto
        {
            VehicleId = s.Key.VehicleId,
            PeriodStartDate = EF.Functions.GetGregoryDate(s.Key.PersianYear, s.Key.PersianMonth, s.Key.PersianDay),
            AggregatedValue = s.Sum(m => m.Distance)
        });
    return await query.ToListAsync();
}

EF генерирует этот запрос:

SELECT "m"."VEHICLE_ID" "VehicleId", "GET_GREGORIAN_DATE"("m"."PERSIAN_YEAR" "PersianYear", "m"."PERSIAN_MONTH" "PersianMonth", "m"."PERSIAN_DAY" "PersianDay") "PeriodStartDate", CAST(SUM("m"."DISTANCE") AS NUMBER(29,4)) "AggregatedValue"
  FROM "AVL"."VW_CALCULATED_DISTANCE" "m"
  GROUP BY "m"."PERSIAN_YEAR", "m"."PERSIAN_MONTH", "m"."PERSIAN_DAY", "m"."VEHICLE_ID"

и Oracle выдает ошибку:

OracleException: ORA- 00907: отсутствует правая круглая скобка

, потому что EF передает имя параметра с его псевдонимом в GetGregoryDate функцию:

"GET_GREGORIAN_DATE"("m"."PERSIAN_YEAR" "PersianYear", ... )

, в то время как он должен просто передавать имя параметра или псевдонимы.

Как я могу решить эту проблему?

...