Предполагая таблицу тегов, как StackOverflow вопрос теги:"Самый популярный" GROUP BY in LINQ?
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, которое в противном случае потребовалось бы проверить с базой данных для каждого тега, если я действительно использовал свойство.
Так я тогда разобрать эти анонимные типы назад в объекты Tag:
groups.OrderByDescending(g => g.Frequency).Take(25).ToList().ForEach(t => tags.Add(new Tag()
{
Tag = t.Tag,
Frequency = t.Frequency
}));
Я новичок LINQ, и это не кажется правильным. Пожалуйста, покажите мне, как это делается.
Я считаю, что ваш SQL должен быть `SELECT Tag, COUNT (тег) FROM Tags GROUP BY Tag ORDER BY COUNT (тег) DESC FETCH FIRST 25 ROWS ONLY`, который не делает Linq показаться настолько плохим. – NetMage 2016-10-07 00:17:23