Jak liczyć skojarzone elementy bez pobierania ich w strukturze encji

Zastanawiam się nad tym już od jakiegoś czasu, więc pomyślałem, że warto zapytać o to za pomocą mojego pierwszego posta Przepełnienie stosu.

Wyobraź sobie, że mam dyskusję z powiązaną listą wiadomości:

DiscussionCategory discussionCategory = _repository.GetDiscussionCategory(id);

discussionCategory.Discussions to lista jednostek dyskusyjnych, która nie jest aktualnie załadowana.

Chcę, aby możliwe było przeglądanie dyskusji w kategorii dyskusyjnej i określanie liczby wiadomości w każdej dyskusji bez pobierania danych wiadomości.

Kiedy próbowałem tego zrobić, musiałem wczytać Dyskusje i Wiadomości, abym mógł zrobić coś takiego:

discussionCategory.Discussions.Attach(Model.Discussions.CreateSourceQuery().Include("Messages").AsEnumerable());

foreach(Discussion discussion in discussionCategory.Discussions)
{

int messageCount = discussion.Messages.Count;

Console.WriteLine(messageCount);

}

Wydaje mi się to raczej nieefektywne, ponieważ pobieram potencjalnie setki ciał wiadomości z bazy danych i przechowuję je w pamięci, gdy wszystko, co chcę zrobić, to policzyć ich liczbę dla celów prezentacyjnych.

Widziałem kilka pytań dotyczących tego tematu, ale wydawało się, że nie dotyczą go bezpośrednio.

Z góry dziękuję za wszelkie myśli na ten temat.

Aktualizacja - więcej wymaganego kodu:

public ActionResult Details(int id)
    {  
        Project project = _repository.GetProject(id);
        return View(project);
    }

Następnie w widoku (aby przetestować):

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

Mam nadzieję, że to sprawi, że mój problem stanie się jaśniejszy. Daj mi znać, jeśli potrzebujesz więcej szczegółów kodu.

questionAnswers(6)

yourAnswerToTheQuestion