I would suggest that a custom comparer would work better than orderby, since 2 intervals with the same start won't necessarily get sorted right:
public IList<Interval> Merge(IList<Interval> intervals){ var outVal = new SortedSet<Interval>(intervals,new IntervalComparer()); for (int i = 0; i < outVal.Count - 1; i++) { Interval curr = outVal.ElementAt(i); Interval next = outVal.ElementAt(i + 1); if(next.start - curr.end < 1) { curr.end = Math.Max(curr.end, next.end); outVal.Remove(next); i--; } } return outVal.ToList();}public class IntervalComparer : IComparer<Interval>{ public int Compare(Interval lhs, Interval rhs) { if (lhs.start == rhs.start) { return lhs.end.CompareTo(rhs.end); } return lhs.start.CompareTo(rhs.start); }}