Я некоторое время размышлял об этом, поэтому подумал, что стоило бы использовать мой первый пост с переполнением стека, чтобы спросить об этом.
Представьте, что у меня есть обсуждение со связанным списком сообщений:
DiscussionCategory discussionCategory = _repository.GetDiscussionCategory(id);
DiscussionCategory.Discussions - список сущностей Дискуссии, который в данный момент не загружен.
То, что я хочу, - это иметь возможность перебирать обсуждения в категории обсуждения и указывать, сколько сообщений содержится в каждом обсуждении без извлечения данных сообщения.
Когда я попробовал это раньше, мне пришлось загрузить обсуждения и сообщения, чтобы я мог сделать что-то вроде этого:
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
Надеюсь, это прояснит мою проблему. Дайте мне знать, если вам нужно больше деталей кода.