Принимая таблицу тегов, таких как теги вопроса stackoverflow:
TagID (bigint), QuestionID (bigint), Tag (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, которое в противном случае потребовало бы проверки в базе данных для каждого тега, если бы я действительно использовал это свойство.
Итак, я анализирую эти анонимные типы back в объекты Tag:
groups.OrderByDescending(g => g.Frequency).Take(25).ToList().ForEach(t => tags.Add(new Tag()
{
Tag = t.Tag,
Frequency = t.Frequency
}));
Я новичок в LINQ, и это не так. Пожалуйста, покажите мне, как это действительно делается.