Я уже некоторое время задавался вопросом об этом, поэтому я подумал, что стоит использовать мой первый пост о переполнении стека, чтобы спросить об этом.
Представьте, что у меня есть обсуждение со связанным списком сообщений:
DiscussionCategory discussionCategory = _repository.GetDiscussionCategory(id);
discoveryCategory.Discussions — это список сущностей Discussion, которые в данный момент не загружены.
Что я хочу, так это иметь возможность перебирать обсуждения в категории обсуждения и говорить, сколько сообщений находится в каждом обсуждении, не извлекая данные сообщения.
Когда я пробовал это раньше, мне приходилось загружать обсуждения и сообщения, чтобы я мог сделать что-то вроде этого:
discussionCategory.Discussions.Attach(Model.Discussions.CreateSourceQuery().Include("Messages").AsEnumerable());
foreach(Discussion discussion in discussionCategory.Discussions)
{
int messageCount = discussion.Messages.Count;
Console.WriteLine(messageCount);
}
Это кажется мне довольно неэффективным, так как я потенциально извлекаю сотни тел сообщений из базы данных и храню их в памяти, когда все, что я хочу сделать, это подсчитать их количество для презентационных целей.
Я видел несколько вопросов, затрагивающих эту тему, но, похоже, они не затрагивали ее напрямую.
Заранее спасибо за любые мысли, которые могут у вас возникнуть на эту тему.
Обновление. Еще немного кода по запросу:
public ActionResult Details(int id)
{
Project project = _repository.GetProject(id);
return View(project);
}
Затем в представлении (просто для проверки):
Model.Discussions.Load();
var items = from d in Model.Discussions select new { Id = d.Id, Name = d.Name, MessageCount = d.Messages.Count() };
foreach (var item in items) {
//etc
Я надеюсь, что это делает мою проблему немного яснее. Дайте мне знать, если вам нужны дополнительные сведения о коде.