LINQ GroupBy continuous time
Assuming I have a simple structure that looks like this:

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

	    public Range(DateTime start, DateTime end)
	    {
		    this.Start = start;
		    this.Start = end;
	    }
    }

And I create an collection like so:

    var dr1 = new Range(new DateTime(2011, 11, 1, 12, 0, 0), new DateTime(2011, 11, 1, 13, 0, 0));
	var dr2 = new Range(new DateTime(2011, 11, 1, 13, 0, 0), new DateTime(2011, 11, 1, 14, 0, 0));
	var dr3 = new Range(new DateTime(2011, 11, 1, 14, 0, 0), new DateTime(2011, 11, 1, 15, 0, 0));
	var dr4 = new Range(new DateTime(2011, 11, 1, 16, 0, 0), new DateTime(2011, 11, 1, 17, 0, 0));
	
	var ranges = new List<Range>() { dr1, dr2, dr3, dr4 };

What I want to do is group the ranges where they are continuous - i.e. they are continuous if the Start and End values are the same.

We can assume that there are no collisions/duplicates or overlaps in the Range values.

In the example posted, I would end up with two groups:

2011-11-1 12:00:00 - 2011-11-1 15:00:00

2011-11-1 16:00:00 - 2011-11-1 17:00:00

It's fairly easy to come up with an iterative solution for this. But is they some LINQ magic I can use to get this in a pretty one-liner?

Thanks in advance
LINQ GroupBy continuous time
===

Assuming I have a simple structure that looks like this:

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

	    public Range(DateTime start, DateTime end)
	    {
		    this.Start = start;
		    this.Start = end;
	    }
    }

And I create an collection like so:

    var dr1 = new Range(new DateTime(2011, 11, 1, 12, 0, 0), new DateTime(2011, 11, 1, 13, 0, 0));
	var dr2 = new Range(new DateTime(2011, 11, 1, 13, 0, 0), new DateTime(2011, 11, 1, 14, 0, 0));
	var dr3 = new Range(new DateTime(2011, 11, 1, 14, 0, 0), new DateTime(2011, 11, 1, 15, 0, 0));
	var dr4 = new Range(new DateTime(2011, 11, 1, 16, 0, 0), new DateTime(2011, 11, 1, 17, 0, 0));
	
	var ranges = new List<Range>() { dr1, dr2, dr3, dr4 };

What I want to do is group the ranges where they are continuous - i.e. they are continuous if the Start and End values are the same.

We can assume that there are no collisions/duplicates or overlaps in the Range values.

In the example posted, I would end up with two groups:

2011-11-1 12:00:00 - 2011-11-1 15:00:00

2011-11-1 16:00:00 - 2011-11-1 17:00:00

It's fairly easy to come up with an iterative solution for this. But is they some LINQ magic I can use to get this in a pretty one-liner?

Thanks in advance