【发布时间】:2011-10-05 09:04:25
【问题描述】:
我有一个特定类型的 IEnumerable (List)。该类型有一组属性,我想将它们绘制为单独的系列(MVC3/Razor)。
有没有办法可以将对象列表中的数据转换为属性列表?
例如 鉴于下面的代码,我试图实现的最终结果是一组系列,所以我有
Bucket1: IEnumerable<Date, Value>
Bucket2: IEnumerable<Date, Value>
etc
这样我就可以绘制每个系列的图表,以获得 x 上的日期和 y 上的值的折线图,用于(在此示例中)3 个系列/线。这段代码运行良好,但感觉有点不对劲?
var buckets = new List<Bucket>(){
new Bucket{
Date=DateTime.Today.AddDays(-3),
Bucket1=1000,
Bucket2=2000,
Bucket3=3000},
new Bucket{
Date=DateTime.Today.AddDays(-2),
Bucket1=1000,
Bucket2=2020,
Bucket3=3300},
new Bucket{
Date=DateTime.Today.AddDays(-1),
Bucket1=1000,
Bucket2=2040,
Bucket3=3600}
};
var chart = new Chart(){ Height = 400, Width = 600 };
var area = new ChartArea();
chart.ChartAreas.Add(area);
var series1 = chart.Series.Add("Bucket 1");
var series2 = chart.Series.Add("Bucket 2");
var series3 = chart.Series.Add("Bucket 3");
foreach (var series in chart.Series)
{
series.ChartType = SeriesChartType.Line;
}
foreach (var item in buckets)
{
series1.Points.AddXY(item.Date, item.Bucket1);
series2.Points.AddXY(item.Date, item.Bucket2);
series3.Points.AddXY(item.Date, item.Bucket3);
}
【问题讨论】:
-
代码并不是真的“错误”。您可能可以使用 Linq GroupBy 缩短它,但这取决于系列接受的格式。就这样吧。
-
同意这并不是真正的“错误”......只是看起来很笨重。
-
发布 Bucket 类并解释你想要实现的目标。每个桶类应该属于一天吗?每个存储桶条目(bucket1,bucket2,bucket3)是否应该有自己的日期?
-
Bucket 类就是您在此处看到的 - 每个日期一个。
-
@Henk Holterman:你能补充一个答案吗?我环顾四周,四处乱逛,得出的结论是没有办法让它变得“更干净”。我添加了一些 linq 来从枚举中获取系列名称,但这就是我真正能做的。
标签: c# linq asp.net-mvc-3 charts razor