C#Linq-根据开始时间和结束时间的时差分组

C#Linq-根据开始时间和结束时间的时差分组,c#,linq,datetime,lambda,C#,Linq,Datetime,Lambda,我有一个像这样的对象: [ { StartTime: "05/21/2020 10:00", EndTime: "05/21/2020 10:30" }, { StartTime: "05/21/2020 11:00", EndTime: "05/21/2020 11:30" }, { StartTime: "05/21/2020 12:00", EndTime: "05/21/2020 12:30" }, { StartTime: "05/21/2020 15:00", EndTime: "0

我有一个像这样的对象:

[
{ StartTime: "05/21/2020 10:00", EndTime: "05/21/2020 10:30" },
{ StartTime: "05/21/2020 11:00", EndTime: "05/21/2020 11:30" },
{ StartTime: "05/21/2020 12:00", EndTime: "05/21/2020 12:30" },
{ StartTime: "05/21/2020 15:00", EndTime: "05/21/2020 15:30" },
{ StartTime: "05/21/2020 16:00", EndTime: "05/21/2020 16:30" },
{ StartTime: "05/21/2020 18:00", EndTime: "05/21/2020 18:30" },
{ StartTime: "05/21/2020 19:00", EndTime: "05/21/2020 19:30" },
{ StartTime: "05/21/2020 20:00", EndTime: "05/21/2020 20:30" },
{ StartTime: "05/21/2020 21:00", EndTime: "05/21/2020 21:30" }
]
[
{ StartTime: "05/21/2020 10:00", EndTime: "05/21/2020 12:30" },
{ StartTime: "05/21/2020 15:00", EndTime: "05/21/2020 16:30" },
{ StartTime: "05/21/2020 18:00", EndTime: "05/21/2020 21:30" }
]
我想使用linq对它们进行分组以创建一个如下所示的对象,分组依据应基于第一个对象的结束时间和下一个对象的开始时间之间的时间差,如您在对象数组中所看到的,前三个对象在其下一个对象的结束时间和开始时间之间有30分钟的差异,这表明它们彼此相关,因此我应该取第一个项目的开始时间和最后一个对象的结束时间,并创建如下对象:

[
{ StartTime: "05/21/2020 10:00", EndTime: "05/21/2020 10:30" },
{ StartTime: "05/21/2020 11:00", EndTime: "05/21/2020 11:30" },
{ StartTime: "05/21/2020 12:00", EndTime: "05/21/2020 12:30" },
{ StartTime: "05/21/2020 15:00", EndTime: "05/21/2020 15:30" },
{ StartTime: "05/21/2020 16:00", EndTime: "05/21/2020 16:30" },
{ StartTime: "05/21/2020 18:00", EndTime: "05/21/2020 18:30" },
{ StartTime: "05/21/2020 19:00", EndTime: "05/21/2020 19:30" },
{ StartTime: "05/21/2020 20:00", EndTime: "05/21/2020 20:30" },
{ StartTime: "05/21/2020 21:00", EndTime: "05/21/2020 21:30" }
]
[
{ StartTime: "05/21/2020 10:00", EndTime: "05/21/2020 12:30" },
{ StartTime: "05/21/2020 15:00", EndTime: "05/21/2020 16:30" },
{ StartTime: "05/21/2020 18:00", EndTime: "05/21/2020 21:30" }
]

如果我理解正确,您需要合并前一个
EndTime
与当前
StartTime
之间差异小于或等于30分钟的记录

假设数组将被排序,这是我能想到的最简单的方法:

public List<YourObject> MergeTimes(List<YourObject> list)
{
    List<YourObject> result = new List<YourObject>();
    result.Add(list.First());
    for (int i = 1; i < list.Count; i++)
    {
        if ((list[i].StartTime - list[i - 1].EndTime).TotalMinutes <= 30)
            result.Last().EndTime = list[i].EndTime;
        else
            result.Add(new { StartDate = list[i].StartTime, EndTime = list[i].EndTime });
    }

    return result;
}
公共列表合并时间(列表)
{
列表结果=新列表();
result.Add(list.First());
for(int i=1;i如果((list[i].StartTime-list[i-1].EndTime).TotalMinutes-LINQ的
GroupBy
实际上不是这样工作的。我建议从更经典的“迭代”方法来考虑这一点。