C# LINQ组的x天数
我有一张物品清单C# LINQ组的x天数,c#,linq,C#,Linq,我有一张物品清单 列表 样本值: 22-02-2020 | StatisticsData 21-02-2020 | StatisticsData 20-02-2020 | StatisticsData 19-02-2020 | StatisticsData 19-02-2020 | StatisticsData 18-02-2020 | StatisticsData 17-02-2020 | StatisticsData 16-02-2020 | StatisticsData 15-
列表
样本值:
22-02-2020 | StatisticsData
21-02-2020 | StatisticsData
20-02-2020 | StatisticsData
19-02-2020 | StatisticsData
19-02-2020 | StatisticsData
18-02-2020 | StatisticsData
17-02-2020 | StatisticsData
16-02-2020 | StatisticsData
15-02-2020 | StatisticsData
我的目标是将它分成若干批,持续X天。例如,如果我想记录2天的条目,结果我将收到:
第一批:
22-02-2020 | StatisticsData
21-02-2020 | StatisticsData
第二批:
20-02-2020 | StatisticsData
19-02-2020 | StatisticsData
19-02-2020 | StatisticsData
第三批:
18-02-2020 | StatisticsData
17-02-2020 | StatisticsData
等等
我坚持用LINQ来完成任务。确定两天时段开始的“时间段”(例如,DateTime.MinValue
以避免担心负值),然后按时段索引分组:
var batches=data.GroupBy(stat=>(int)(stat.EndTime-DateTime.MinValue).TotalDays/2);
尝试按索引分组:
var list = Enumerable.Range(40,25);
var groupByRecords = 10;
var groupedList = list
.Select((x, i) => new { value = x, index = i })
.GroupBy( x=> x.index / groupByRecords)
.Select(x => x.Select(y => y.value));
已编辑:如果每天有多个条目,则不起作用,抱歉。其他可能的解决方案是使用
勾号,如下所示:
long batchPeriod = (TimeSpan.TicksPerDay * 2);
var batches = data.GroupBy(g => g.EndTime.Ticks % batchPeriod);
我关于SoF的第一个问题得到了Jon Skeet的回答。谢谢你,乔恩。这似乎正是我要找的。
long batchPeriod = (TimeSpan.TicksPerDay * 2);
var batches = data.GroupBy(g => g.EndTime.Ticks % batchPeriod);