階差数列作るところは
array.Zip(array.Skip(1), (x, y) => new { Value = x, Difference = y - x })
で行けるし、
最後のグループ化のところは GroupBy なり ToLookup で行けそうだけど、
階差が1出ないところで切るって条件付けがやっぱりイテレーターブロック使いたいなぁ。

状態持たなきゃいけない部分はクエリ式だけじゃ書きにくい。