How can I group by specific timestamp intervals in C# using LINQ?

大城市里の小女人 提交于 2019-12-23 04:35:21

问题


I have a list with tick objects including a pair of a double value and a timestamp.

I want to separate the list into child-lists depending on a time interval (for example 15 minutes). One list only has the tick objects from: 8:00:00 - 8:14-59 usw usw

C#-code:

var result = from tick in listTicks
group tick by tick.timestamp.Hour; 

The datetime functions like day, hour, minute work fine but a specific interval wasn't possible for me.

It is LINQ to objects. I have already got the list from the DB and I want to transform the list.

If I have data from 8-22 each day separate to 3 h he separate this way:

0-2;3-5;6-8;9-11

With code:

var result = from tick in listTicks group tick by
(tick.timestamp.Day * 10 + tick.timestamp.Hour / 3);

I want:

8-10;11-13;14-16;17-19;20-22

I want it to separate it this way.


回答1:


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 = ... };

Fixed: DateTime.Now will cause issues :)

Bug notice: Wont work with LINQ2SQL

Fix: Left to reader :)




回答2:


Create a computed column in your SQL database, set this expression to the date and make it return the number of seconds represented by that date.

You can then group by the divided value, it should work fine. If you divide by 15 * 60, you'll get groups of 15 mins.

Edit:

var result = from tick in listTicks 
             group tick by tick.timestamp / (3 * 3600);

For the above to work, timestamp should be the number of seconds since some epoch, if you're using SQL sever this would be SqlDateTime.MinValue.



来源:https://stackoverflow.com/questions/611441/how-can-i-group-by-specific-timestamp-intervals-in-c-sharp-using-linq

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!