Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ组的x天数_C#_Linq - Fatal编程技术网

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);