我想在c#中使用Linq将以下日期时间组合在一起,如下所示:
第1组:
2015-03-03 15:18:42.880
2015-03-03 15:18:42.897
第2组:
2015-03-19 16:29:59.977
2015-03-19 16:29:59.983
2015-03-19 16:29:59.983
第3组:
2015-03-26 11:27:29.813
2015-03-26 11:27:30.030
2015-03-26 11:27:30.030
第4组:
2015-03-27 15:13:58.483
2015-03-27 15:13:58.483
2015-03-27 15:13:58.500
我对其中一些分组存在问题。目前,我只是将日期分组,忽略毫秒部分。我想做的是将没有毫秒的彼此在1秒内的日期分组。 这是我到目前为止的查询:
var query =
from trans in TransactionTable.AsEnumerable()
let dateWithoutMilliseconds = trans.Field<DateTime>("TranactionDate").AddMilliseconds(-trans.Field<DateTime>("TranactionDate").Millisecond)
group trans by dateWithoutMilliseconds into g
select new
{
TransDate = g.Key,
};
答案 0 :(得分:1)
您可以转换为Ticks
(100纳秒),向上舍入,然后再转回DateTime
。如果您只想GroupBy
只围绕Tick
s:
DateTime source = ...
...
// Up to nearest second
const int shift = 10000000;
DateTime result = new DateTime(
(source.Ticks / shift + (source.Ticks % shift >= (shift / 2) ? 1 : 0)) * shift);
// If you want just a key to group by
long key = (source.Ticks / shift + (source.Ticks % shift >= (shift / 2) ? 1 : 0)) * shift;