Использование LINQ для получения одной сущности с большей частью дочерней сущности - PullRequest
3 голосов
/ 07 октября 2011

У меня есть сущность в Entity Framework 4, которая называется Topic.Topic имеет свойство навигации к коллекции Reply сущностей.

Я пытаюсь создать запрос, который получает наиболее популярную тему на основе количества ответов.

entityContainer.Topics.Single(x => x./* has the most replies of any topic */);

Я не уверен, как создать запрос для достижения этой цели.

1 Ответ

5 голосов
/ 07 октября 2011

Это может выполнить то, что вы хотите сделать.

var mostPopularTopic = entityContainer.Topics
    .OrderByDescending(t => t.Replies.Count())
    .FirstOrDefault();

if(mostPopularTopic != null) // If there were any topics...
{
    // ...
}

Я полагаю, это будет ужасно,

Лучшим вариантом может быть денормализация ваших данных (слегка) и добавление столбца подсчета ответов в таблицу Topic. Затем вы можете проиндексировать этот столбец, выполнить простую сортировку и получить строку. Это позволит избежать сканирования всей таблицы Topics и количества (во время запроса) для каждой записи Replies.

Компромисс будет в том, что вы должны быть осторожны, чтобы гарантировать, что счетчик Replies всегда обновляется, или жить с результатами, которые не всегда полностью обновлены, и выполнять фоновую работу для восстановления этих значений.

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