Посчитать кол-во вхождений каждого слова в тексте при помощи LINQ

Я пытаюсь сделать вот что: взять текст, разбить его на слова, а потом получить пары "слово - кол-во его вхождений в текст". Решение хочу получить при помощи LINQ.

Я делаю группировку, и после этого прекрасно получаю в цикле по ключу группировки counter - кол-во вхождений слова.

Но хотелось бы сделать это без цикла, чтобы 1) использовать "ленивым" образом 2) можно было сделать дальнейшие преобразования, нпаример, сорттировку по частоте

Но вот как сделать "трансформацию" в терминах LINQ - не могу понять... Не подскажете ли вы мне? Спасибо.

    using System;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;

    namespace Linq06 {
        class Program {
            static void Main(string[] args) {
                StreamReader sr = new StreamReader("Text.txt", Encoding.GetEncoding(1251));
                string str = sr.ReadToEnd();
                MatchCollection wcoll = Regex.Matches(str, @"[а-я]\w*", RegexOptions.IgnoreCase);
                // Получим коллекцию слов
                var allWorlds = wcoll.Cast<Match>().Select(w => w.ToString());

                var grp = allWorlds.GroupBy(x => x);

                foreach (IGrouping<string, string> g in grp) {
                    var counter = allWorlds.Count(x => g.Key == x);
                }

                Console.ReadKey();
            }
        }
    }

Ответы (1 шт):

Автор решения: SmorcIRL

Так?

var result = allWorlds.GroupBy(x => x).Select(x => new {Word = x.Key, Count = x.Count()});
→ Ссылка