Cela fait un moment que je m'interroge sur ce sujet, et j'ai donc pensé qu'il valait la peine d'utiliser mon premier post Stack Overflow pour poser la question.
Imaginons que j'aie une discussion à laquelle est associée une liste de messages :
DiscussionCategory discussionCategory = _repository.GetDiscussionCategory(id);
discussionCategory.Discussions est une liste d'entités Discussion qui n'est pas encore chargée.
Ce que je veux, c'est pouvoir parcourir les discussions d'une discussionCategory et dire combien de messages se trouvent dans chaque discussion sans avoir à récupérer les données des messages.
Lorsque j'ai essayé cela auparavant, j'ai dû charger les discussions et les messages pour pouvoir faire quelque chose comme cela :
discussionCategory.Discussions.Attach(Model.Discussions.CreateSourceQuery().Include("Messages").AsEnumerable());
foreach(Discussion discussion in discussionCategory.Discussions)
{
int messageCount = discussion.Messages.Count;
Console.WriteLine(messageCount);
}
Cela me semble plutôt inefficace, car j'extrais potentiellement des centaines de corps de messages de la base de données et je les garde en mémoire alors que tout ce que je souhaite faire, c'est compter leur nombre à des fins de présentation.
J'ai vu quelques questions qui abordaient ce sujet, mais elles ne semblaient pas l'aborder directement.
Merci d'avance pour toute réflexion que vous pourriez avoir sur ce sujet.
Mise à jour - Un peu plus de code comme demandé :
public ActionResult Details(int id)
{
Project project = _repository.GetProject(id);
return View(project);
}
Ensuite, dans la vue (juste pour tester) :
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
J'espère que mon problème est un peu plus clair. Faites-moi savoir si vous avez besoin de plus de détails sur le code.