Łączenie nakładających się interwałów czasowych?

Mam następujące:

public class Interval
{
   DateTime Start;
   DateTime End; 
}

mamList<Interval> obiekt zawierający wiele interwałów. Próbuję osiągnąć następujące cele (użyłem numerów, aby było to łatwe do zrozumienia):

[(1, 5), (2, 4), (3, 6)] --->  [(1,6)]
[(1, 3), (2, 4), (5, 8)] --->  [(1, 4), (5,8)]

Obecnie robię to w Pythonie w następujący sposób:

def merge(times):
    saved = list(times[0])
    for st, en in sorted([sorted(t) for t in times]):
        if st <= saved[1]:
            saved[1] = max(saved[1], en)
        else:
            yield tuple(saved)
            saved[0] = st
            saved[1] = en
    yield tuple(saved)

ale próbuję osiągnąć to samo w C # (LINQ byłoby najlepsze, ale opcjonalne). Wszelkie sugestie, jak to zrobić skutecznie?

questionAnswers(5)

yourAnswerToTheQuestion