Поиск n-самых популярных с помощью Linq - PullRequest
0 голосов
/ 02 августа 2011

Как мне структурировать запрос Linq, чтобы получить список или список самых популярных тегов в моей базе данных (кстати, я использую EF4.1).

В настоящее время у меня есть:

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

Я думаю, что я часть пути туда, но я не уверен, как структурировать оператор Select ...

Ответы [ 4 ]

2 голосов
/ 02 августа 2011

Ваш Select вызов может выглядеть следующим образом:

.Select(gp => gp.Key)

Это даст вам IEnumerable<string> ваших самых популярных тегов (при условии, что Name - это string).

1 голос
/ 02 августа 2011

Вы написали отлично работающий запрос и вам не нужно звонить .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();
1 голос
/ 02 августа 2011

Предполагая, что вам нужно имя и количество, просто:

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

РЕДАКТИРОВАТЬ: Если вы хотите также полный теги, вы можете использовать:

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

, что даст вам последовательность групп тегов, все с одним именем в группе.Или вам может понадобиться только тег first в каждой группе, например,

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

Непонятно, из чего состоит тег, или из каких точно вы хотите врезультаты.

0 голосов
/ 02 августа 2011

Возможно, вы захотите выбрать такие имена:

.Select(gp => gp.Key);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...