gpt4 book ai didi

c# - 在数据库 SQL 中计算平均值

转载 作者:太空狗 更新时间:2023-10-30 00:59:36 25 4
gpt4 key购买 nike

我需要计算两个日期之差的平均值,四舍五入到小数点后两位。

使用 Entity Framework Core 我使用了以下内容:

var average = await games
.Where(x => x.Finish.HasValue)
.AverageAsync(x => Math.Round((x.Finish.Value - x.Start).TotalDays, 2));

这似乎是在内存中运行。

如何计算数据库 (SQL) 的平均值?

最佳答案

问题不是Average,而是时间跨度计算——目前 EF Core (2.x) 不支持时间跨度计算的通用 SQL 转换。

对于 SqlServer 虽然你可以使用一些 DateDiff EF Core 2.1 中引入的方法。它们都返回 int 值,因此您不能直接使用 DateDiffDay 来获得 TimeSpan.TotalDays 的等价物,但您可以使用 DateDiffHour/24dDateDiffMinute/(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

关于c# - 在数据库 SQL 中计算平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55461402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com