在一个函数中对单个模型运行多个linq查询

时间:2014-10-08 22:34:49

标签: asp.net linq model

作为学校项目的一部分,我正在努力建立一个简单的论坛。我发现任何与我的风格完全融合的都是免费的,所以我自己制作基础知识。

使用列表我将输出表单,然后输出线程,然后发布帖子,这样它将会深入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:             }

2 个答案:

答案 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();
    }