使用Linq找到最受欢迎的人

时间:2011-08-02 18:03:37

标签: linq entity-framework

我应该如何构建一个Linq查询来返回我的数据库中最流行的标签的List或Ienumerable(我顺便使用EF4.1)。

目前我有:

  var tagsListing = db.Tags
                            .GroupBy(q => q.Name)
                                .OrderByDescending(gp => gp.Count())
                                .Take(5)
                                .Select();

我认为我是那里的一部分,但我不确定如何构建Select语句......

4 个答案:

答案 0 :(得分:2)

您的Select来电可能如下:

.Select(gp => gp.Key)

这将为您提供IEnumerable<string>个最受欢迎的代码(假设Namestring)。

答案 1 :(得分:1)

假设您需要名称和计数,只需:

.Select(g => new { Name = g.Key, Count = g.Count() });

编辑:如果你想要完整的标签,可以使用:

.Select(g => new { Tags = g, Count = g.Count() })

它会为您提供一系列 groups 标记,这些标记在一个组中具有相同的名称。或者您可能只需要每个组中的第一个标记,例如

.Select(g => g.First())

目前尚不清楚标记的内容是什么,或者结果中您想要的完全

答案 2 :(得分:1)

您编写了一个完美可行的查询,无需致电.Select

IQueryable<IGrouping<string, Tag>> tagsListing = db.Tags
  .GroupBy(q => q.Name)
  .OrderByDescending(gp => gp.Count())
  .Take(5);

List<IGrouping<string, Tag>> results = tagListing.ToList();

答案 3 :(得分:0)

您可能想要选择如下名称:

.Select(gp => gp.Key);