首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用LINQ对C#中的特定时间戳间隔进行分组?

如何使用LINQ对C#中的特定时间戳间隔进行分组?
EN

Stack Overflow用户
提问于 2009-03-04 16:46:17
回答 2查看 3.8K关注 0票数 0

我有一个包含滴答对象的列表,包括一对双值和一个时间戳。

我希望根据时间间隔(例如15分钟)将列表划分为子列表。一个列表中只有8:00:00 - 8:14-59 usw usw的滴答对象。

C#-代码:

代码语言:javascript
运行
复制
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

密码:

代码语言:javascript
运行
复制
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

我想让它这样分开。

EN

回答 2

Stack Overflow用户

发布于 2009-03-04 16:59:55

代码语言:javascript
运行
复制
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:留给读者:)

票数 2
EN

Stack Overflow用户

发布于 2009-03-04 17:32:00

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

然后你可以按分割值分组,它应该工作得很好。如果你除以15 * 60,你会得到15分钟的小组。

编辑:

代码语言:javascript
运行
复制
var result = from tick in listTicks 
             group tick by tick.timestamp / (3 * 3600);

要使上面的内容正常工作,时间戳应该是某个时代以来的秒数,如果您使用的是sever,这将是SqlDateTime.MinValue。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/611441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档