gpt4 book ai didi

c# - 如何使用 LINQ 查询平均 DateTime 字段?

转载 作者:太空狗 更新时间:2023-10-29 22:16:49 25 4
gpt4 key购买 nike

我有一个数据库,在 DateTime 字段中有以下记录:

2012-04-13 08:31:00.000
2012-04-12 07:53:00.000
2012-04-11 07:59:00.000
2012-04-10 08:16:00.000
2012-04-09 15:11:00.000
2012-04-08 08:28:00.000
2012-04-06 08:26:00.000

我想运行 linq to sql 查询以从上面的记录中获取平均时间。我尝试了以下方法:

(From o In MYDATA Select o.SleepTo).Average()

因为“SleepTo”是一个日期时间字段,所以我在 Average() 上遇到错误。如果我试图获取整数的平均值,则上述 linq 查询有效。

我需要做什么才能使其适用于日期时间?

最佳答案

在内部,每个 DateTime 实际上都存储为多个刻度。 DateTime 的 Ticks 属性定义为“自 0001 年 1 月 1 日午夜 12:00:00 以来经过的 100 纳秒间隔的数量”。 (参见 http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx)

您可以将日期时间转换为刻度,然后求平均值,然后再转换回日期时间。

var averageTicks = (long) dates.Select(d => d.Ticks).Average();
var averageDate = new DateTime(averageTicks);

使用您的数据结构和格式,它看起来像这样:

var averageTicks = (long)(from o in MYDATA select o.SleepTo.Ticks).Average();
var averageDate = new DateTime(averageTicks);

如果你想得到每个 SleepTo 值的平均时间(忽略 Date 组件),你可以得到时间的滴答声:

var averageTicks = (long)(from o in MYDATA select o.SleepTo.TimeOfDay.Ticks).Average();
var averageTime = new TimeSpan(averageTicks);

关于c# - 如何使用 LINQ 查询平均 DateTime 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10149497/

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