.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? Чому воно має існувати?
Lookup, але GroupByстворює його, коли результат перераховується referenceource.microsoft.com/#System.Core/System/Linq/…
GroupByЄIQuerable,ILookupні