作为学校项目的一部分,我正在努力建立一个简单的论坛。我发现任何与我的风格完全融合的都是免费的,所以我自己制作基础知识。
使用列表我将输出表单,然后输出线程,然后发布帖子,这样它将会深入3页。
我遇到的问题是在第一页上我想从数据库中获取帖子/帖子的当前计数。因为这可能会在一瞬间发生变化,我想我会计算页面加载量,因为对于这个项目来说,最好可能有100条记录来计算......
下面的代码会引发错误。
public ActionResult Index(int page = 1)
{
ViewBag.Title = "Forums";
var model = db.forums.OrderBy(x=> x.forumID).ToPagedList(page, 15);
foreach (var m in db.forums)
{
m.postCount = db.threads.Where(t => t.forumID == m.forumID && t.threadID == t.parentThreadID ).Count();
m.threadCount = db.threads.Where(t => t.forumID == m.forumID).Count();
}
return View(model);
}
错误抛出
Exception Details: System.InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first.
Source Error:
Line 20: foreach (var m in db.forums)
Line 21: {
Line 22: m.postCount = db.threads.Where(t => t.forumID == m.forumID && t.threadID == t.parentThreadID ).Count();
Line 23: m.threadCount = db.threads.Where(t => t.forumID == m.forumID).Count();
Line 24: }
答案 0 :(得分:1)
我建议只对模型进行一次调用,然后用Linq过滤两次。
示例代码:
foreach (var m in model)
{
var threads = db.threads.ToList();
m.postCount = threads.Where(t => t.forumID == m.forumID && t.threadID == t.parentThreadID).Count();
m.threadCount = threads.Where(t => t.forumID == m.forumID).Count();
}
答案 1 :(得分:0)
事实证明我正在循环遍历db.forums并需要遍历我的模型,因为我已经检索了详细信息。
foreach (var m in model)
{
m.postCount = db.threads.Where(t => t.forumID == m.forumID && t.threadID == t.parentThreadID ).Count();
m.threadCount = db.threads.Where(t => t.forumID == m.forumID).Count();
}