C# 按日期时间/间隔划分的Linq组

C# 按日期时间/间隔划分的Linq组,c#,linq,C#,Linq,我有以下疑问 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() };

我有以下疑问

 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、 时间是一个日期时间。上面闻起来有点像i.m.o.有什么干净的方法吗 是否根据日期时间按间隔分组

编辑:我不太喜欢的是拨弄琴弦和产生琴弦。理想情况下,我希望从组中生成DateTime,而不是字符串。

这是怎么回事:

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() };
编辑:根据建议更改为
.AddSeconds
,类似

group t by t.AddSeconds(60- t.Time.Seconds) // rounds to nearest minute

看来我真正想要的是

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连接的一个很好的替代方法。

一分钟内有600000000个刻度,因此您可以这样做,以便按最近的分钟进行分组:

var x = from t in v
        group t by new DateTime(t.Time.Ticks - (t.Time.Ticks % 600000000)) into g
        select new { Tag = g.Key, Frequency = g.Count() };

您可以使用
dateTime.ToString(“yyyy-MM-dd-HH:MM”)
更好地复制该格式。确保24小时内使用大写字母“H”,否则会将AM和PM分组在一起…至少更干净。我想生成一个DateTime,而不是字符串。这将中断毫秒的值不起作用。即使我将毫秒数归零,查询也会产生大量类似的日期时间——它不会对它们进行分组。
var x = from t in v
group t by t.Time.Date.AddMinutes((Int32)t.Time.TimeOfDay.TotalMinutes) into g
   select new { Tag = g.Key, Frequency = g.Count() };