首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq分组方式: DateTime / intervals

Linq分组方式: DateTime / intervals
EN

Stack Overflow用户
提问于 2010-02-09 06:29:45
回答 5查看 6.1K关注 0票数 3

我有以下查询

代码语言:javascript
复制
 var x = from t in v
                    group t by t.Time.Year + "-" t.Time.Month + "-" + 
                      t.Time.Day + " " t.Time.Hour + ":" + t.Time.Minute into g
                    select new { Tag = g.Key, Frequency = g.Count() };

t.Time是一个DateTime。上面的味道有点i.m.o的味道。有没有什么干净的方法可以根据DateTimes对间隔进行分组?

编辑:我不太喜欢的是字符串的处理和字符串的生成。理想情况下,我希望从组中生成一个DateTime,而不是一个字符串。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-09 07:57:01

似乎我真正想要的是

代码语言:javascript
复制
group t by
 new DateTime(t.Time.Year,t.Time.Month,t.Time.Day ,t.Time.Hour,t.Time.Minute,0) 
into g

涉及加/减的建议对我都不起作用,即使我也将毫秒设置为+。

如果我需要字符串,dateTime.ToString("yyyy-MM-dd HH:mm")是strinc连接的一个很好的替代方案。

票数 10
EN

Stack Overflow用户

发布于 2010-02-09 06:40:22

就像这样

代码语言:javascript
复制
group t by t.AddSeconds(60- t.Time.Seconds) // rounds to nearest minute
票数 1
EN

Stack Overflow用户

发布于 2010-02-09 06:35:37

这样如何:

代码语言:javascript
复制
DateTime[] v = new DateTime[]
{
    new DateTime(2010, 01, 01, 01, 01, 00, 100),
    new DateTime(2010, 01, 01, 01, 01, 30, 200),
    new DateTime(2010, 01, 01, 02, 01, 00, 300),
    new DateTime(2010, 01, 01, 03, 01, 45, 400)
};

var x = from t in v
        //group t by t.ToString("yyyy-MM-dd HH:mm") into g
        group t by t.AddSeconds(-t.TimeOfDay.TotalSeconds % 60) into g
        select new { Tag = g.Key, Frequency = g.Count() };

编辑:根据@Colin建议更改为.AddSeconds

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

https://stackoverflow.com/questions/2225371

复制
相关文章

相似问题

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