首页 > 解决方案 > 对 IEnumerable 对象中的连续日期进行分组

问题描述

我有一个具有 2 个日期时间属性的 C# 类

public class Event
{
    public string Name {get; set;}
    public DateTime Start {get; set;}
    public DateTime End {get; set;}
}

调用第 3 方 API 后,我得到一个反序列化的事件列表。

IEnumerable<Event> events = GetEvents();

这是上下文

1. These are calender events
2. Each object is one entity on a calender

现在的问题是,

假设活动日期是这样的

1月20日, 1月21日, 1月22日, 1月23日, 1月25日, 1月26日, 1月28日, 1月30日

然后第 3 方 API 返回这样的结果。

{
    Start: Jan 20,
    End: Jan 20
},
{
    Start: Jan 21,
    End: Jan 21
},
{
    Start: Jan 22,
    End: Jan 22
},
{
    Start: Jan 23,
    End: Jan 23
},
{
    Start: Jan 25,
    End: Jan 25
},
{
    Start: Jan 26,
    End: Jan 26
},
{
    Start: Jan 28,
    End: Jan 28
},
{
    Start: Jan 30,
    End: Jan 30
}

但我想要的是将连续的邻近事件转换并分组为单个实体。所以结果应该是这样的。意味着连续的日期应该是一个单一的实体

{
    Start: Jan 20, //Because 20-23 are consicutive days. No gaps in between
    End: Jan 23
},
{
    Start: Jan 25, // Because 25-26 are concisutive days. No gaps in between
    End: Jan 26
},
{
    Start: Jan 28,
    End: Jan 28
},
{
    Start: Jan 30,
    End: Jan 30
}

如何使用某种形式的转换函数来实现它?

标签: c#.netlistdatetime

解决方案


推荐阅读