LINQ запрос, чтобы выбрать 10 лучших записей с большинством комментариев из таблицы - PullRequest
10 голосов
/ 02 января 2012

У меня есть две таблицы «ПОСТЫ» и «КОММЕНТАРИИ».В одном посте может быть много комментариев, и я хочу иметь возможность выбрать 10 лучших постов с наибольшим количеством комментариев.Post_id - это FK в таблице комментариев.Я использую Linq для SQL.Пожалуйста, посоветуйте мне, как это сделать.Заранее спасибо.

РЕДАКТИРОВАТЬ

var top = (from q in db.question_tables
                   from a in db.answer_tables
                   where q.QUEST_ID.Equals(a.ANS_QUEST_ID)
                   orderby q.QUEST_TEXT.Count() descending
                   select new
                   {
                       QUEST_TEXT = q.QUEST_TEXT


                   }).Take(10);

так выглядит мой запрос linq, выдающий ошибку "Операторы последовательности не поддерживаются для типа" Система.Строка ".": /

Ответы [ 2 ]

33 голосов
/ 02 января 2012

Это сообщение об ошибке вызвано тем, что вы вызываете .Count() для строкового свойства (QUEST_TEXT).Это компилируется, потому что строки перечислимы.Однако Linq-to-SQL этого не понимает.

Если у вас есть отношения между двумя таблицами, отображенными в вашем файле DBML, то вы можете использовать это в своем выражении:

var top = (from q in db.question_tables
           orderby q.answers.Count() descending
           select q).Take(10);

Однако код, который вы разместили, не совсем соответствует описанию, которое вы дали.Вы упоминаете комментарии, но код говорит об ответах.

4 голосов
/ 02 января 2012

Присоединиться Posts и Comments, упорядочить по количеству Post.Comment по убыванию и взять верхнюю 10.

(from p in Posts
from c in Comments
where c.PostId == p.Id
orderby p.Comments.Count() descending
select p).Take(10);

РЕДАКТИРОВАТЬ

Из ваших правок похоже, что выпытаемся найти вопрос с самым длинным значением QUEST_TEXT.Если это то, что вам нужно, просто измените ваш код на orderby q.QUEST_TEXT.Length descending, но это не похоже на то, что вы изначально просили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...