假设有一个标签表,例如 stackoverflow 问题标签:
TagID (bigint)、QuestionID (bigint)、标签 (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);
真的吗?这不是太冗长了吗?可悲的是,我这样做是为了节省大量查询,因为我的标签对象已经包含一个频率属性,否则如果我实际使用该属性,则需要检查数据库中的每个标签。
所以我然后解析这些匿名类型back进入标签对象:
groups.OrderByDescending(g => g.Frequency).Take(25).ToList().ForEach(t => tags.Add(new Tag()
{
Tag = t.Tag,
Frequency = t.Frequency
}));
我是 LINQ 新手,这似乎不对。请告诉我它是如何真正完成的。
如果您想要 Tag 对象,为什么不直接从 Linq 查询创建它们呢?
var groups = from t in DataContext.Tags
group t by t.Tag into g
select new Tag() { Tag = g.Key, Frequency = g.Count() };
return groups.OrderByDescending(g => g.Frequency).Take(25);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)