asp.net-mvc如何在迭代时添加对象(Foreach)

时间:2016-05-19 13:20:50

标签: c# asp.net-mvc

我有这样的观点

@(Html.Kendo().Chart()
        .Name("chart-store")
        .Title("Percentage Store Rent")
        .Legend(legend => legend
            .Position(ChartLegendPosition.Bottom)
        )
        //.SeriesColors(new string[] { "#42a7ff", "#666666", "#999999", "#cccccc", "#013A5E" })
        .Series(series => {
            series.Pie(new dynamic[] {
                new {category = "Living Room",value = 35},
                new {category = "Dinning Room",value = 25},
                new {category = "Study Room",value = 20},
                new {category = "Bedroom",value = 10},
                new {category = "Outdoor",value = 10}                
            })
            .Labels(labels => labels
                .Visible(true)
                .Position(ChartPieLabelsPosition.OutsideEnd)
                .Template("#= category # - #= kendo.format('{0:P}', percentage)#")
                .Background("transparent")
            );
        })
        .Tooltip(tooltip => tooltip
            .Visible(true)
            .Template("#= category # - #= kendo.format('{0:P}', percentage) #")
        )
    )

该系列.Pie数据仍然是静态的。我想从数据库获取数据..我已经完成了下面的代码。但只提供一行数据..

查看

@(Html.Kendo().Chart()
        .Name("chart-store")
        .Title("Percentage Store Rent")
        .Legend(legend => legend
            .Position(ChartLegendPosition.Bottom)
        )
        //.SeriesColors(new string[] { "#42a7ff", "#666666", "#999999", "#cccccc", "#013A5E" })
        .Series(series => {
            series.Pie(new dynamic[]{@g**.app.web.Controllers.Tran******Controller.GetPieChartByRoom()})
            .Labels(labels => labels
                .Visible(true)
                .Position(ChartPieLabelsPosition.OutsideEnd)
                .Template("#= category # - #= kendo.format('{0:P}', percentage)#")
                .Background("transparent")
            );
        })
        .Tooltip(tooltip => tooltip
            .Visible(true)
            .Template("#= category # - #= kendo.format('{0:P}', percentage) #")
        )
    )

CONTROLLER

public static object GetPieChartByRoom() {
            List<string> mHBM = new List<string>();
            mHBM.Add(mcHBM_SALES);
            mHBM.Add(mcHBM_BusinessPartner);
            mHBM.Add(mcHBM_Employee);
            mHBM.Add(mcHBM_LIST);
            mHBM.Add(mcHBM_GeneralListType);
            ISession voISession = NHibernateSession.OpenSession(mHBM);

            var getRoom = voISession.QueryOver<Lists>().Where(w=>w.Type==17).List();
            var voTable = new object();
            foreach (var ListRoom in getRoom)
            {
                var RoomCount = voISession.QueryOver<SalesAgreementDetail>().Where(w => w.Room == ListRoom.ListID).RowCount();
                voTable = new { category = ListRoom.ListName, value = RoomCount };
            }

            return voTable;        
        }

谢谢你的关注,抱歉我的英语不好:D

1 个答案:

答案 0 :(得分:0)

在此代码中

var voTable = new object();
foreach (var ListRoom in getRoom)
{
  var RoomCount = voISession.QueryOver<SalesAgreementDetail>().Where(w => w.Room == ListRoom.ListID).RowCount();
  voTable = new { category = ListRoom.ListName, value = RoomCount };
}

return voTable; 

您正在循环中为voTable分配一个新对象,而不是将新对象添加到其中,这就是您在图中只获得一行的原因,因为您最后只传递了一行

您需要的是将新对象添加到voTable变量中。如下所示

var voTable = new List<object>();   //changes here
foreach (var ListRoom in getRoom)
{
  var RoomCount = voISession.QueryOver<SalesAgreementDetail>().Where(w => w.Room == ListRoom.ListID).RowCount();
  voTable.Add(new { category = ListRoom.ListName, value = RoomCount }); //changes here
}

return voTable;