如何正确地使用linq为数组赋值?

时间:2016-04-01 09:07:17

标签: c# asp.net-mvc linq charts

我正在尝试制作图表。

这有效:

@model List<MyApp.Models.SystemModel>
    @{var myChart = new Chart(width: 600, height: 400)
        .AddTitle("Chart Title")
        .AddSeries(
        name: "Employee",
        xValue: Model[0].HistoryValues.Select(x => x.LastUpdateSTR).ToArray(),
        yValues: Model[0].
               HistoryValues.Select(x => x.ServerPerformance).ToArray())
        .Write();
    }

但是我不想继续使用Model [0]我想继续我列表中的每个模型对象。

我试过这个:

@model List<MyApp.Models.SystemModel>
<div id="Chart col-md-6">
    @{ var myChart = new Chart(width: 600, height: 400)
        .AddTitle("ServerPerformance")
        .AddSeries(
            name: "ServerPerformance",
            xValue: Model.Select(y => y.HistoryValues.Select(x => x.LastUpdateSTR)).ToArray(),
            yValues: Model.Select(y => y.HistoryValues.Select(x => x.ServerPerformance)).ToArray()
        )
        .Write();                             
    }
</div>

但是这给了一个outOfrangeException:

  

数据点绑定错误。此数据只能设置1个Y值   系列

我很清楚我的linq代码不正确,我尝试过使用其他方法作为.foreach(),但这给了我更大的麻烦。

我该怎么做?

编辑:

我在我的控制器中尝试了这个。

var myChart = new Chart(width: 600, height: 400)
                                                                                                  .AddTitle("ServerPerformance")
    .AddSeries(
      name: "ServerPerformance",
      xValue: model.Select(y => y.HistoryValues.Select(x => x.LastUpdateSTR)).ToArray(),
     yValues: model.Select(y => y.HistoryValues.Select(x => x.ServerPerformance)).ToArray());

X和Y值为空。

MODEL:

public string GuidId { get; set; }
public bool EverythingOffline { get; set; }
public bool ServerOnline { get; set; }
public long ServerPerformance { get; set; }
public string DomainName { get; set; }
public string Url { get; set; }
public string ErrorMessage { get; set; }
public long DomainId { get; set; }
public Guid Id { get; set; }
public bool DatabaseOnline { get; set; }
public bool Passed { get; set; }
public long Databaseperformance { get; set; }
public DateTime LastUpdate { get; set; }

public string LastUpdateSTR { get; set; }

public long SoldTicketsLastUpdate { get; set; }
public long SoldTicketsLastThirtyMin { get; set; }
public long SoldTicketsLastFifteenMin { get; set; }

public DateTime LastUpdateDate { get; set; }
public double LastUpdateDateMinutes { get; set; }

public DateTime SoldTitcketsDate { get; set; }

public List<SystemModel> HistoryValues { get; set; }

1 个答案:

答案 0 :(得分:1)

如果您的模型是一个列表,并且此列表的每个元素都有列表HistoryValues,您应该能够通过此代码选择所有值

xValue: model.SelectMany(y => y.HistoryValues).Select(x => x.LastUpdateSTR).ToArray(),
yValues: model.SelectMany(y => y.HistoryValues).Select(x => x.ServerPerformance).ToArray()