Я создал пользовательскую функцию 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", ... )
, в то время как он должен просто передавать имя параметра или псевдонимы.
Как я могу решить эту проблему?