LINQ 中“最受欢迎”的 GROUP BY?

2024-05-30

假设有一个标签表,例如 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(使用前将#替换为@)

LINQ 中“最受欢迎”的 GROUP BY? 的相关文章