Создание частотного словаря

Дан текст, нужно вывести count наиболее часто встречающихся в тексте слов вместе с их частотой. Среди слов, встречающихся одинаково часто, отдавать предпочтение лексикографически меньшим словам. Слова сравнивать регистронезависимо и выводить в нижнем регистре.

Напомним сигнатуры некоторых LINQ-методов, которые могут понадобиться в этом упражнении:

IEnumerable<IGrouping<K, T>>    GroupBy(this IEnumerable<T> items, Func<T, K> keySelector)
IOrderedEnumerable<T>           OrderBy(this IEnumerable<T> items, Func<T, K> keySelector)
IOrderedEnumerable<T> OrderByDescending(this IEnumerable<T> items, Func<T, K> keySelector)
IOrderedEnumerable<T>            ThenBy(this IOrderedEnumerable<T> items, Func<T, K> keySelector)
IOrderedEnumerable<T>  ThenByDescending(this IOrderedEnumerable<T> items, Func<T, K> keySelector)
IEnumerable<T>                     Take(this IEnumerable<T> items, int count)
Комментарии отключены
Работает форматирование: **жирный текст**, __курсивный текст__, `код`, ```многострочный код```.
Простые правила хороших комментариев:
  • Используйте подсказки перед тем, как задать вопрос в комментариях.
  • Воздержитесь от вопросов «Почему у меня не работает?». Отлаживайте, экспериментируйте, думайте!
  • Пожалуйста, не публикуйте свои решения.
  • Мы будем благодарны вам за доброжелательный тон в комментариях.