如何在剃刀视图中构建foreach循环内的数组

时间:2013-05-07 11:37:33

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

我正在使用MVC4和C#而我正在尝试在视图中构建和数组,而我正在循环我的模型,由于某种原因我得到“超时已过期。在操作完成之前超时时间已过去或服务器没有响应。“如果我删除我尝试构建数组arr1和arr2的部分并将它们发送到名为ArrTotal的方法,它工作正常。这似乎没什么好事,不知道为什么它会导致超时。它应该在与之前相同的查询中构建数组,并且方法ArrTotal所做的就是将两个数组中的值一起添加,不应该发生新的查询以使服务器超时。

@model Tuple<Namespace.Models.Class1[], Namespace.Models.Class2[]>
....
         @{
    int i, x = 0;
    int[] arr1;
    int[] arr2;
    }
    @foreach (var item in Model.Item1)
    {            

        arr1[i] = item.count;
        <tr>
            <td>@item.year</td>
            <td>@item.month</td>
            <td>@item.count</td>
        </tr>
        i++;
    }
....
   @foreach (var item in Model.Item2)
    {                        
        arr2[x] = item.count;
        <tr>
            <td>@item.year</td>
            <td>@item.month</td>
            <td>@item.count</td>
        </tr>
        x++;
    }
....
    @{        
        int[] total = Namespace.Models.GetTotal.ArrTotal(arr1, arr2);        
    }
    @foreach (var t in total)
    {
    <tr>
        <td>@t</td>
    </tr>
    }

编辑 - 更多信息: 这是我运行两个查询的控制器:

var start = DateTime.Today.AddMonths(-15);
var query1 = (from t in db.table1
                     where t.ExportTemplate == "template1" && t.LogDate >= start
                     group t by new { Year = t.LogDate.Year, Month = t.LogDate.Month } into tg
                     orderby tg.Key.Year, tg.Key.Month
                     select new Class1
                     {
                         year = tg.Key.Year,
                         month = tg.Key.Month,
                         count = tg.Select(s => s.ObjectGUID).Distinct().Count()
                     }
                    );

        var query2 = (from t in db2.table2
                       where t.UserID == 3 && t.RequestID == 3 && t.ErrorID == 0 && t.LogDate >= start
                       group t by new { Year = t.LogDate.Value.Year, Month = t.LogDate.Value.Month } into tg
                       orderby tg.Key.Year, tg.Key.Month
                       select new Class2
                       {
                           year = tg.Key.Year,
                           month = tg.Key.Month,
                           count = tg.Select(s => s.GID).Distinct().Count()
                       }
                    );
        return View(System.Tuple.Create(query1.ToArray(), query2.ToArray()));

它的返回视图超时。 就像我说的那样,只要我不尝试从视图构建数组

就行

1 个答案:

答案 0 :(得分:1)

当您调用ToArray时,它会在您的控制器中进行评估。数据库在那里被击中。但是你使用的是实体框架吗?然后你仍然绑定上下文,也许懒惰加载和所有这些。确保分离对象。

您使用的总方法可能也有问题。