将数据从IEnumerable中的对象的离散属性转换为数组/系列以进行制图?

时间:2011-10-05 09:04:25

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

我有一个特定类型的IEnumerable(List<>)。 Type有一组属性,我想将其作为单个系列(MVC3 / Razor)绘制。

有没有办法可以将对象列表中的数据转换为属性列表?

e.g。 鉴于下面的代码,我试图实现的最终结果是一组系列,所以我有

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

2 个答案:

答案 0 :(得分:0)

如何为每个系列使用Lambda表达式(下面的代码未经过测试 - 它只是一个原型):

var series1 = buckets.Select(b => new { b.Date, b.Bucket1 });
var series2 = buckets.Select(b => new { b.Date, b.Bucket2 });

答案 1 :(得分:0)

感谢发布的评论,我保留了原始代码,并且认为没有更简单的方法来执行此操作。