我一直在想這一段時間,所以我認爲這將是值得使用我的第一個堆棧溢出後詢問它。如何計算相關實體,而不需要在實體框架中獲取它們
想象我有消息的關聯列表的討論:
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
我希望這是我的問題更清楚一點。讓我知道你是否需要更多的代碼細節。
嗨,謝謝你的回答。不幸的是,我之前嘗試過,發現匿名類型的count屬性對於所有討論都返回零。看到你的答案後,我再次嘗試這種方法,但結果相同。 也許我誤解了有關框架的一些問題,只要保持實體與數據存儲「連接」即可。 其他人可以確認上述方法應該工作嗎? – Oligarchia 2010-01-06 14:47:54
顯示您的代碼;你做錯了什麼。我們在我們的運輸應用中廣泛使用此功能*。我懷疑你試圖在EF關聯屬性(如你的問題)而不是在L2E查詢(如我的答案)。那些完全不同;前者是LINQ to Objects;後者是LINQ to Entities。 – 2010-01-06 14:52:23
我使用的代碼在形式上與您提供的代碼相同。也許有更進一步的環節出了問題。如果您認爲有幫助,我會查看是否可以編輯原始帖子以提供其他代碼。再次感謝你的幫助。我正在查看您現在鏈接到的博客文章。 – Oligarchia 2010-01-06 15:02:18