0

我有一个包含刻度对象的列表,其中包括一对双精度值和一个时间戳。

我想根据时间间隔(例如 15 分钟)将列表分成子列表。一个列表仅包含来自以下时间的刻度对象:8:00:00 - 8:14-59 usw usw

C#-代码:

var result = from tick in listTicks
group tick by tick.timestamp.Hour; 

像天、小时、分钟这样的datetime功能可以正常工作,但对我来说不可能有一个特定的时间间隔。

它是对象的 LINQ。我已经从数据库中获得了列表,我想转换列表。

如果我有每天 8-22 到 3 小时的数据,他以这种方式分开:

0-2;3-5;6-8;9-11

带代码:

var result = from tick in listTicks group tick by
(tick.timestamp.Day * 10 + tick.timestamp.Hour / 3);

我想:

8-10;11-13;14-16;17-19;20-22

我希望它以这种方式分开。

4

2 回答 2

2
var result = from tick in listTicks
group tick by (tick.timestamp - DateTime.MinValue).TotalMinutes / 15 into f
from c in f
select new { StartTime = DateTime.MinValue + TimeSpan.FromMinutes(c.Key),
             Items = ... };

已修复:DateTime.Now 会导致问题 :)

错误通知:不适用于 LINQ2SQL

修复:留给读者:)

于 2009-03-04T16:59:55.450 回答
0

在 SQL 数据库中创建一个计算列,将此表达式设置为日期并使其返回该日期表示的秒数。

然后,您可以按除值分组,它应该可以正常工作。如果除以 15 * 60,您将得到 15 分钟的组。

编辑:

var result = from tick in listTicks 
             group tick by tick.timestamp / (3 * 3600);

为了使上述工作正常,时间戳应该是自某个纪元以来的秒数,如果您使用的是 SQL 服务器,这将是 SqlDateTime.MinValue。

于 2009-03-04T17:32:00.707 回答