C# 获取开始时间和结束时间列表中重叠时间的最大值

C# 获取开始时间和结束时间列表中重叠时间的最大值,c#,linq,datetime,intersect,C#,Linq,Datetime,Intersect,我试图计算时间相交处的最大时间值 我希望下面代码示例的预期结果应该是4 共有8次,共有6个值相交,一组4个,一组2个 我想得到的是交叉点的最大值,但就是不能让它工作 这就是目前的准则 void Main() { var times = new List<Times> { new Times { Start = DateTime.Now, End = DateTime.Now.AddMinutes(10)

我试图计算时间相交处的最大时间值

我希望下面代码示例的预期结果应该是4

共有8次,共有6个值相交,一组4个,一组2个

我想得到的是交叉点的最大值,但就是不能让它工作

这就是目前的准则

void Main()
{
var times = new List<Times> {
new Times
        {
            Start = DateTime.Now,
            End = DateTime.Now.AddMinutes(10)
        },
new Times
        {
            Start = DateTime.Now,
            End = DateTime.Now.AddMinutes(10)
        },
new Times
        {
            Start = DateTime.Now.AddMinutes(2),
            End = DateTime.Now.AddMinutes(10)
        },

new Times
        {
            Start = DateTime.Now.AddMinutes(15),
            End = DateTime.Now.AddMinutes(35)
        },
new Times
        {
            Start = DateTime.Now.AddMinutes(25),
            End = DateTime.Now.AddMinutes(42)
        },
new Times
        {
            Start = DateTime.Now.AddMinutes(43),
            End = DateTime.Now.AddMinutes(50)
        },
new Times
        {
            Start = DateTime.Now.AddMinutes(55),
            End = DateTime.Now.AddMinutes(89)
        },
new Times
        {
            Start = DateTime.Now.AddMinutes(2),
            End = DateTime.Now.AddMinutes(12)
        }
};


times.OrderBy(x => x.Start);

var overlappingEvents =
                        (
                        from e1 in times
                        where times
                            .Where(e2 => e1 != e2)
                            .Where(e2 => e1.Start <= e2.End)
                            .Where(e2 => e1.End >= e2.Start)
                            .Any()
                        select e1).ToList();

overlappingEvents.OrderBy(x => x.Start);
overlappingEvents.Distinct().OrderBy(x => x.Start);
overlappingEvents.Distinct().OrderBy(x => x.Start).Count();

}

public class Times
{
public DateTime Start { get; set; }
public DateTime End { get; set; }
}
如果有人能帮助我获得交叉点的最大值,我将非常感激


谢谢,试试这个。我假设两个层段重叠,如果它们至少有一个公共点(即矿石层段的起点等于另一个层段的终点)


向类中再添加一个属性

   public class Times
   {
       public DateTime Start { get; set; }
       public DateTime End { get; set; }
       public TimeSpan Gap { get; set; }
   }
计算差距

   times.OrderBy(x => x.Start);

   for (int i = 0; i < times.Count-1; i++)
   {
      times[i].Gap = times[i+1].Start - times[i].End;
   }

   times.OrderByDescending(x => x.Gap);
times.OrderBy(x=>x.Start);
对于(int i=0;ix.Gap);

完美!非常感谢。
bool IsOverlapping(Times t1, Times t2)
{
    return t1.Contains(t2.Start) || t1.Contains(t2.End) || t2.Contains(t1.Start) || t2.Contains(t1.End);
}

public class Times
{
    public DateTime Start { get; set; }
    public DateTime End { get; set; }

    public bool Contains(DateTime date)
    {
        return date >= Start && date <= End;
    }
}
   public class Times
   {
       public DateTime Start { get; set; }
       public DateTime End { get; set; }
       public TimeSpan Gap { get; set; }
   }
   times.OrderBy(x => x.Start);

   for (int i = 0; i < times.Count-1; i++)
   {
      times[i].Gap = times[i+1].Start - times[i].End;
   }

   times.OrderByDescending(x => x.Gap);