从 SQL、C# 与 Linq 到 JSON 的数据转换,用于 Highcharts 折线图

本文关键字:转换 数据 用于 折线图 Highcharts JSON SQL Linq | 更新日期: 2023-09-27 18:32:22

我希望将以下SQL结果转换为Highcharts折线图的JSON列表。我正在使用 C#。我无法弄清楚如何创建一个适当的类并以所需的格式用这些数据填充它们。

ID  Name    Month   Year    Data
2   Name 1  10      2015    4
2   Name 1  11      2015    5
2   Name 1  12      2015    6
3   Name 2  10      2015    6
3   Name 2  11      2015    7
3   Name 2  12      2015    8
4   Name 3  10      2015    35
4   Name 3  11      2015    7
4   Name 3  12      2015    8

最终结果需要采用类似这种格式。ID和年份也需要通过,但用于不同的事情。这能做到吗?

categories: ['10', '11', '12'],....
series: [{
        name: 'Name 1',
        data: [4, 5, 6]
    }, {
        name: 'Name 2',
        data: [6, 7, 8]
    }, {
        name: 'Name 3',
        data: [35, 7, 8]
    }
}]

从 SQL、C# 与 Linq 到 JSON 的数据转换,用于 Highcharts 折线图

class Program
{
    static void Main(string[] args)
    {
        var ro = new RootObject();
        ro.AddRow(1, "Name1", 2015, 10, 4);
        ro.AddRow(1, "Name1", 2015, 11, 5);
        ro.AddRow(1, "Name1", 2015, 12, 6);
        ro.AddRow(2, "Name2", 2015, 10, 6);
        ro.AddRow(2, "Name2", 2015, 11, 7);
        ro.AddRow(2, "Name2", 2015, 12, 8);
        ro.AddRow(3, "Name3", 2015, 10, 35);
        ro.AddRow(3, "Name3", 2015, 11, 7);
        ro.AddRow(3, "Name3", 2015, 12, 8);
        string output = JsonConvert.SerializeObject(ro);
        Console.WriteLine(output);
        //Output:
        //{
        //    "categories":[10,11,12],
        //    "series":[
        //        {"name":"Name1","data":[4,5,6]},
        //        {"name":"Name2","data":[6,7,8]},
        //        {"name":"Name3","data":[35,7,8]}]
        //}
        Console.ReadKey();
    }
    public class RootObject
    {
        public RootObject()
        {
            categories = new List<int>();
            series = new List<Series>();
        }
        public void AddRow(int id, string name, int year, int month, int data)
        {
            if (!categories.Contains(month))
            {
                categories.Add(month);
            }
            var serie = series.FirstOrDefault(x => x.name == name);
            if (serie == null)
            {
                serie = new Series(name);
                series.Add(serie);
            }
            serie.data.Add(data);
        }
        public List<int> categories { get; set; }
        public List<Series> series { get; set; }
    }
    public class Series
    {
        public Series(string _name)
        {
            name = _name;
            data = new List<int>();
        }
        public string name { get; set; }
        public List<int> data { get; set; }
    }
}