Предполагая таблицу тегов, такую как теги вопросов stackoverflow:
TagID (bigint), QuestionID (bigint), тег (varchar)
Каков наиболее эффективный способ получить 25 наиболее используемых тегов с помощью LINQ? В SQL простая команда GROUP BY выполнит:
SELECT Tag, COUNT(Tag) FROM Tags GROUP BY Tag
Я написал несколько LINQ, которые работают:
var groups = from t in DataContext.Tags
group t by t.Tag into g
select new { Tag = g.Key, Frequency = g.Count() };
return groups.OrderByDescending(g => g.Frequency).Take(25);
Как, действительно? Разве это не мега-многословие? Печально то, что я делаю это, чтобы сохранить огромное количество запросов, так как мои объекты Tag уже содержат свойство Frequency, которое в противном случае нужно было бы проверить с базой данных для каждого тега, если я действительно использовал свойство.
Итак, я затем разбираю эти анонимные типы обратно в объекты Tag:
groups.OrderByDescending(g => g.Frequency).Take(25).ToList().ForEach(t => tags.Add(new Tag()
{
Tag = t.Tag,
Frequency = t.Frequency
}));
Я новичок в LINQ, и это кажется неправильным. Пожалуйста, покажите мне, как это было сделано.