我有一个包含tick对象的列表,包括一对double值和一个时间戳。
我希望根据时间间隔(例如15分钟)将列表分成子列表。一个列表只有来自的对象:8:00:00 - 8:14-59 usw usw
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
我希望它以这种方式分开。
答案 0 :(得分: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
修复:留给读者:)
答案 1 :(得分:0)
在SQL数据库中创建一个计算列,将此表达式设置为日期,并使其返回该日期所代表的秒数。
然后您可以按分割值进行分组,它应该可以正常工作。如果你除以15 * 60,你将得到15分钟的小组。
var result = from tick in listTicks
group tick by tick.timestamp / (3 * 3600);
为了使上述工作,时间戳应该是自某个纪元以来的秒数,如果你使用SQL服务器,这将是SqlDateTime.MinValue。