我有一个包含滴答对象的列表,包括一对双值和一个时间戳。
我希望根据时间间隔(例如15分钟)将列表划分为子列表。一个列表中只有8:00:00 - 8:14-59 usw usw的滴答对象。
C#-代码:
var result = from tick in listTicks
group tick by tick.timestamp.Hour; datetime的功能像一天、一小时、一分钟的工作很好,但对我来说是不可能有一个特定的间隔的。
它是。我已经从DB获得了列表,我想转换列表。
如果我有从每天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
我想让它这样分开。
发布于 2009-03-04 16:59:55
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会引发问题:)
Bug通知:不适用于LINQ2SQL
Fix:留给读者:)
发布于 2009-03-04 17:32:00
在SQL数据库中创建计算列,将此表达式设置为日期,并使其返回由该日期表示的秒数。
然后你可以按分割值分组,它应该工作得很好。如果你除以15 * 60,你会得到15分钟的小组。
编辑:
var result = from tick in listTicks
group tick by tick.timestamp / (3 * 3600);要使上面的内容正常工作,时间戳应该是某个时代以来的秒数,如果您使用的是sever,这将是SqlDateTime.MinValue。
https://stackoverflow.com/questions/611441
复制相似问题