数据库查回来的数据ID model date testdata
1 model1 2018-1 1.21
2 model1 2018-2 1.22
3 model1 2018-3 1.23
4 model1 2018-4 1.24
5 model1 2018-5 1.25
6 model2 2018-1 2.1
7 model2 2018-2 2.2
8 model2 2018-3 2.3
9 model2 2018-4 2.4
10 model2 2018-5 2.5组成
{
model:model1
data :[2018-1,2018-2,2018-3,2018-4,2018-5]
testdata:[1.21,1.22,1.23,1.24,1.25]
},
{
model:model2
data :[2018-1,2018-2,2018-3,2018-4,2018-5]
testdata:[2.1,2.2,2.3,2.4,2.5]
}
这种结构的!
1 model1 2018-1 1.21
2 model1 2018-2 1.22
3 model1 2018-3 1.23
4 model1 2018-4 1.24
5 model1 2018-5 1.25
6 model2 2018-1 2.1
7 model2 2018-2 2.2
8 model2 2018-3 2.3
9 model2 2018-4 2.4
10 model2 2018-5 2.5组成
{
model:model1
data :[2018-1,2018-2,2018-3,2018-4,2018-5]
testdata:[1.21,1.22,1.23,1.24,1.25]
},
{
model:model2
data :[2018-1,2018-2,2018-3,2018-4,2018-5]
testdata:[2.1,2.2,2.3,2.4,2.5]
}
这种结构的!
public class SingleModel
{
public string model { get; set; }
public string[] data { get; set; }
public float[] testdata { get; set; }
}
结果转化为一个 List<SingleModel> , 再用 Newtonsoft.Json 转 json 就是了。
tablejson[{"id":0,"model":"model0","date":"2018-10","testdata":1.6},{"id":1,"model":"model1","date":"2018-1","testdata":8.9},{"id":2,"model":"model1","date":"2018-5","testdata":2.0},{"id":3,"model":"model1","date":"2018-3","testdata":8.9},{"id":4,"model":"model0","date":"2018-7","testdata":9.6},{"id":5,"model":"model1","date":"2018-0","testdata":9.9},{"id":6,"model":"model1","date":"2018-7","testdata":5.3},{"id":7,"model":"model0","date":"2018-4","testdata":6.4},{"id":8,"model":"model1","date":"2018-5","testdata":7.9},{"id":9,"model":"model0","date":"2018-3","testdata":2.9},{"id":10,"model":"model1","date":"2018-5","testdata":5.7},{"id":11,"model":"model0","date":"2018-1","testdata":7.6},{"id":12,"model":"model0","date":"2018-3","testdata":0.9},{"id":13,"model":"model1","date":"2018-1","testdata":4.1},{"id":14,"model":"model0","date":"2018-2","testdata":2.4},{"id":15,"model":"model0","date":"2018-5","testdata":8.5},{"id":16,"model":"model1","date":"2018-6","testdata":1.1},{"id":17,"model":"model0","date":"2018-8","testdata":7.2},{"id":18,"model":"model0","date":"2018-1","testdata":4.7},{"id":19,"model":"model1","date":"2018-1","testdata":6.6}]序列化json
[
{"model":"model0","date":["2018-10","2018-7","2018-4","2018-3","2018-1","2018-3","2018-2","2018-5","2018-8","2018-1"],"testdata":[1.6,9.6,6.4,2.9,7.6,0.9,2.4,8.5,7.2,4.7]},
{"model":"model1","date":["2018-1","2018-5","2018-3","2018-0","2018-7","2018-5","2018-5","2018-1","2018-6","2018-1"],"testdata":[8.9,2.0,8.9,9.9,5.3,7.9,5.7,4.1,1.1,6.6]}
]
源代码
System.Data.DataTable table = new System.Data.DataTable();
table.Columns.Add("id", typeof(int));
table.Columns.Add("model", typeof(string));
table.Columns.Add("date", typeof(string));
table.Columns.Add("testdata", typeof(decimal));
Random random = new Random(DateTime.Now.Millisecond); for (int i = 0; i < 20; i++)
{
System.Data.DataRow row = table.NewRow();
row["id"] = i;
row["model"] = "model" + random.Next(2);
row["date"] = "2018-" + random.Next(12);
row["testdata"] = (decimal)random.Next(100) / (decimal)10;
table.Rows.Add(row);
} var linqrow = table.Rows.Cast<System.Data.DataRow>()
.Select(r => new { model = r["model"] , date=r["date"] , testdata=r["testdata"] })
.GroupBy(g=>g.model)
.Select(gr=> new { model=gr.Key , date=gr.Select( rr=>rr.date ).ToList(), testdata = gr.Select(rr => rr.testdata).ToList() } ); string jsontable = Newtonsoft.Json.JsonConvert.SerializeObject(table);
string jsonlst = Newtonsoft.Json.JsonConvert.SerializeObject(linqrow);
用了随机数,你的结果和我的可能有差距
.Select(r => new { model = r["model"] , date=r["date"] , testdata=r["testdata"] })
.GroupBy(g=>g.model)
.Select(gr=> new { model=gr.Key , date=gr.Select( rr=>rr.date ).ToList(), testdata = gr.Select(rr => rr.testdata).ToList() } );我嚼碎了给你说
var linqrow = table.Rows.Cast<System.Data.DataRow>()
把datatable转成可查询的datarow array.Select(r => new { model = r["model"] , date=r["date"] , testdata=r["testdata"] })
把datarow对象转成匿名的有三个属性 model、date、testdate 的对象.GroupBy(g=>g.model)
groupby model我就不用多解释了把.Select(gr=> new { model=gr.Key , date=gr.Select( rr=>rr.date ).ToList(), testdata = gr.Select(rr => rr.testdata).ToList() } );
把groupby后的效果转成 model为key,date为集合中date 的list ,testdata为集合中testdata的list 的新对象。最后的json序列化你引入nuget包就能实现。
var linqrow = table.Rows.Cast<System.Data.DataRow>()
.Select(r => new { model = r["model"] , date=r["date"] , testdata=r["testdata"] })
.GroupBy(g=>g.model)
.Select(gr=> new { model=gr.Key , date=gr.OrderBy(rr=>rr.date).Select( rr=>rr.date ).ToList(), testdata = gr.OrderBy(rr => rr.date).Select(rr => rr.testdata).ToList() } );
对了一下数据发现少了排序数据可能乱序。加上了排序。