首页 > 解决方案 > C# 在 for 循环中创建一个新列表,而不是在其上展开

问题描述

我在 MVC 中工作并且有一个看起来像这样的视图

//UPDATED
  @foreach (Site s in sites)
        {

            <tr style="color:black">
                @foreach (var col in ViewBag.OffReportColumns)
                {
                    <th>@col </th>
                }
            </tr>

             <tr style="color:black">
                    @foreach (var cell in ViewBag.OffReportRows)
                    {
                        <td>@cell</td>
                    }
             </tr>

             <tr style="font-size: 20px">
                    @foreach (var cell in ViewBag.OffReportTotal)
                    {
                        <td>@cell</td>
                    }
             </tr>

        }

还有一个看起来像这样的控制器方法

 List<string> OffReportColumns = new List<string>(7);
 List<List<string>> OffReportRows = new List<List<string>>();
 List<List<string>> OffReportTotal = new List<List<string>>();


            foreach (Site s in sites)
            {

                OffReportColumns.Add(s.Name);
                OffReportColumns.Add("");
                OffReportColumns.Add("");
                OffReportColumns.Add("Average Cost");
                OffReportColumns.Add("");
                OffReportColumns.Add("");
                OffReportColumns.Add("Average Cost With Labour");

                OffReportRows.Add(new List<string>
                {
                    "Parts",
                    "",
                    "",
                    osiPartCost[s.ID].ToString("C2"),
                    "",
                    "",
                    osiPartCost[s.ID].ToString("C2")
                });

                OffReportRows.Add(new List<string>
                {
                    "",
                    "600000 series",
                    osiOpc6[s.ID].ToString("C2"),
                    "",
                    "600000 series",
                    osiOpc6[s.ID].ToString("C2"),
                    ""
                });
                OffReportRows.Add(new List<string>
                {
                     "",
                     "700000 series",
                     osiOpc7[s.ID].ToString("C2"),
                     "",
                     "700000 series",
                     osiOpc7[s.ID].ToString("C2"),
                     ""
                 });
                OffReportRows.Add(new List<string>
                {
                      "",
                      "800000 series",
                      osiOpc8[s.ID].ToString("C2"),
                      "",
                      "800000 series",
                      osiOpc8[s.ID].ToString("C2"),
                      ""
                });
                OffReportRows.Add(new List<string>
                {
                       "Tools",
                       "",
                       "",
                       osiTools[s.ID].ToString("C2"),
                       "",
                       "",
                       osiTools[s.ID].ToString("C2"),

                });
                OffReportRows.Add(new List<string>
                {
                        "",
                        "900000 series",
                        osiOpc9[s.ID].ToString("C2"),
                        "",
                        "900000 series",
                        osiOpc9[s.ID].ToString("C2"),
                        ""
                });
                OffReportRows.Add(new List<string>
                {
                        "",
                        "Other",
                        osiOpco[s.ID].ToString("C2"),
                        "",
                        "Other",
                        osiOpco[s.ID].ToString("C2"),
                        ""
                });
                OffReportRows.Add(new List<string>
                {
                        "Components",
                        "",
                        "",
                        osiCompCost[s.ID].ToString("C2"),
                        "",
                        "",
                        osiLoCompCost[s.ID].ToString("C2")
                });
                OffReportRows.Add(new List<string>
                {
                        "Items",
                        "",
                        "",
                        osiItemCost[s.ID].ToString("C2"),
                        "",
                        "",
                        osiLoItemCost[s.ID].ToString("C2")
                });
                OffReportTotal.Add(new List<string>
                {
                        "Total",
                        "",
                        "",
                        osiTotal[s.ID].ToString("C2"),
                        "",
                        "",
                        osiFltotal[s.ID].ToString("C2")
                });

                ViewBag.OffReportRows = OffReportRows;
                ViewBag.OffReportColumns = OffReportColumns;
                ViewBag.OffReportTotal = OffReportTotal;
            }

这是我的网站模型

public class Site
    {
        public int ID { get; set; }

        public string Name { get; set; }
        public string Address { get; set; }
        public string City { get; set; }
        public string Province { get; set; }
        public string PostalCode { get; set; }
    }

我的“站点”表中有 5 个站点。我的目标是为每个站点创建一个表。现在这就是正在发生的事情

界面

如您所见,列运行正常,而不是为每个表创建它们。您还可以看到“OffReportTotals”似乎不存在。问题是它们都在页面底部附近打印,所以看起来像这样

总计

我知道每次迭代循环时它只会使列表变长,而实际上并不是每次都创建一个新列表。但是我怎样才能做到这一点,而不是扩展到列表,它只是在每次循环时创建一个新列表。

标签: c#asp.net-mvclinq

解决方案


推荐阅读