2016-04-01 10 views
0

我想制作一个图表。如何正确地为linq指定数组值?

这工作:

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

但是我不想去研究[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; } 
+0

试试这个'Model.HistoryValues.Select(x => x.LastUpdateSTR).ToArray()' –

+2

为什么不把逻辑移动到控制器中,在那里建立数组的列表并将它们赋值给模型属性,然后通过简单地说一些简单的东西来使用它作为Model.xV alues和Model.yValues –

+0

@Kartikeya Khosla模型是我的模型对象的列表检查编辑 – ThunD3eR

回答

1

如果你的模型是一个列表,该列表中的每一个元素都有名单HistoryValues你应该能够通过这个代码,选择所有值

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