.ToLookup<TSource, TKey>
возвращает ILookup<TKey, TSource>
. ILookup<TKey, TSource>
также реализует интерфейс IEnumerable<IGrouping<TKey, TSource>>
.
.GroupBy<TSource, TKey>
возвращает IEnumerable<IGrouping<TKey, TSource>>
.
ILookup имеет удобное свойство индексатора, поэтому его можно использовать в стиле, подобном словарю (или похожим на поиск), тогда как GroupBy не может. GroupBy без индексатора - это боль для работы; в значительной степени единственный способ, которым вы можете ссылаться на возвращаемый объект, - это перебирать его (или использовать другой метод расширения LINQ). Другими словами, в любом случае, который работает GroupBy, ToLookup также будет работать.
Все это оставляет мне вопрос, почему я буду беспокоиться о GroupBy? Почему он должен существовать?