假设有一个标签表,如 stackoverflow 问题标签:
TagID (bigint), QuestionID (bigint), Tag (varchar)
使用 LINQ 获取 25 个最常用标签的最有效方法是什么?在 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。
所以我然后将这些匿名类型解析回Tag 对象:
groups.OrderByDescending(g => g.Frequency).Take(25).ToList().ForEach(t => tags.Add(new Tag()
{
Tag = t.Tag,
Frequency = t.Frequency
}));
我是 LINQ 新手,这似乎不对。请告诉我它是如何真正完成的。