假设有一个与stackoverflow问题标签相关的表格:
使用LINQ获取最常用的25个标签的最有效方法是什么?在SQL中,简单的GROUP BY即可实现:TagID(bigint),QuestionID(bigint),Tag(varchar)
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);
真的吗?这不是超级冗长吗?可悲的是,我这样做是为了节省大量查询,因为我的标签对象已经包含一个频率属性,否则每个标签都需要与数据库进行检查。
然后,我将这些匿名类型解析回标签对象:
groups.OrderByDescending(g => g.Frequency).Take(25).ToList().ForEach(t => tags.Add(new Tag()
{
Tag = t.Tag,
Frequency = t.Frequency
}));
我是一个LINQ新手,这似乎不正确。请向我展示真正的做法。
SELECT Tag, COUNT(Tag) FROM Tags GROUP BY Tag ORDER BY COUNT(Tag) DESC FETCH FIRST 25 ROWS ONLY
,这样Linq看起来就不那么糟糕了。 - NetMage