using System.Collections.Generic;
public DateTime Start { get; set; }
public DateTime End { get; set; }
public static void Main()
new Bob() {Start = new DateTime(2000, 1, 1, 1, 0, 0), End = new DateTime(2000, 1, 1, 2, 0, 0)},
new Bob() {Start = new DateTime(2001, 1, 1, 1, 0, 0), End = new DateTime(2001, 1, 1, 2, 0, 0)},
new Bob() {Start = new DateTime(2001, 1, 1, 2, 0, 0), End = new DateTime(2001, 1, 1, 3, 0, 0)},
new Bob() {Start = new DateTime(2001, 1, 1, 4, 0, 0), End = new DateTime(2001, 1, 1, 5, 0, 0)},
new Bob() {Start = new DateTime(2001, 1, 1, 5, 0, 0), End = new DateTime(2001, 1, 1, 6, 0, 0)},
new Bob() {Start = new DateTime(2001, 1, 1, 11, 0, 0), End = new DateTime(2001, 1, 1, 12, 0, 0)},
var result = data.Lag(1, (a, b) => new {a, b}).Segment(c => c.a.Start != c.b?.End).ToList();
var result2 = result.Select(z => new { Start = z.First().a.Start, End = z.Last().a.End }).ToList();