Проблема не в Average
, а в вычислении промежутка времени - в настоящее время EF Core (2.x) не поддерживает общий перевод SQL вычислений промежутка времени.
Для SqlServer, хотя вы могли бы использовать некоторые DateDiff методов, представленных в EF Core 2.1.Все они возвращают int
значений, поэтому вы не можете напрямую использовать DateDiffDay
, чтобы получить эквивалент TimeSpan.TotalDays
, но вы можете использовать DateDiffHour / 24d
или DateDiffMinute / (24d * 60)
и т. Д. Для имитации.
Например,
var average = await games
.Where(x => x.Finish.HasValue)
.AverageAsync(x => Math.Round(EF.Functions.DateDiffHour(x.Start, x.Finish.Value) / 24d, 2));
означает
SELECT AVG(ROUND(DATEDIFF(HOUR, [x].[Start], [x].[Finish]) / 24.0E0, 2))
FROM [Game] AS [x]
WHERE [x].[Finish] IS NOT NULL