LINQ按x天分组

3

我有一个对象列表 List<StatisticsData>

   public class StatisticsData
{
    public Guid Id { get; set; }
    public string Name { get; set; }    
    public DateTime EndTime { get; set; }
}

样例数值:

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卡住了,不知道怎么搞..

3个回答

5

确定一些“纪元”,使两天的时间段开始(例如DateTime.MinValue,以避免担心负值),然后按照时间段索引进行分组:

var batches = data.GroupBy(stat => (int) (stat.EndTime - DateTime.MinValue).TotalDays / 2);

我在SoF上的第一个问题得到了Jon Skeet的回答。谢谢你,Jon。这正是我所寻找的。 - hoozr

1

另一个可能的解决方案是使用如下的 Ticks

long batchPeriod = (TimeSpan.TicksPerDay * 2);
var batches = data.GroupBy(g => g.EndTime.Ticks % batchPeriod);

0

尝试按索引分组:

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

编辑:抱歉,如果一天内有多个条目,则无法工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接