LINQ не предназначен для таких задач. Но если сильно хочется, то можно

:
private class Grouping<TKey, TElement>: Collection<TElement>, IGrouping<TKey, TElement>
{
public TKey Key { get; set; }
}
public static IEnumerable<IGrouping<TKey, TSource>> SplitBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
Grouping<TKey, TSource> currentGroup = null;
foreach (TSource item in source)
{
TKey key = keySelector(item);
if (currentGroup != null && !currentGroup.Key.Equals(key))
{
yield return currentGroup;
currentGroup = null;
}
if (currentGroup == null)
{
currentGroup = new Grouping<TKey, TSource>() { Key = key };
}
currentGroup.Add(item);
}
if (currentGroup != null)
{
yield return currentGroup;
}
}
Использовать примерно так:
var result = data.SplitBy(item => item.key);