C# 最快的方法是什么?
我正在使用ASP.NETMVC、Angular.js、SQLServer和Fusion图表构建仪表板。我所有用于制图的数据都存储在数据库中,我通过存储过程获取它们。现在我需要将结果从存储过程传递到Json/XML,只有Fusion图表支持的格式。转换此数据的最佳方法是什么:C# 最快的方法是什么?,c#,json,asp.net-mvc,angularjs,fusioncharts,C#,Json,Asp.net Mvc,Angularjs,Fusioncharts,我正在使用ASP.NETMVC、Angular.js、SQLServer和Fusion图表构建仪表板。我所有用于制图的数据都存储在数据库中,我通过存储过程获取它们。现在我需要将结果从存储过程传递到Json/XML,只有Fusion图表支持的格式。转换此数据的最佳方法是什么: Hour Input Output InTarget OutTarget 7 22314 18537 6500 4875 8 36395 29931 6500 48
Hour Input Output InTarget OutTarget
7 22314 18537 6500 4875
8 36395 29931 6500 4875
9 32661 28518 6500 4875
10 34895 29793 6500 4875
11 30300 26538 6500 4875
12 31011 26898 6500 4875
13 16363 13716 6500 4875
进入这个Json
{
"chart": {
"caption": "Input and Output",
"numberprefix": "$",
"plotgradientcolor": "",
"bgcolor": "FFFFFF",
"showalternatehgridcolor": "0",
"divlinecolor": "CCCCCC",
"showvalues": "0",
"showcanvasborder": "0",
"canvasborderalpha": "0",
"canvasbordercolor": "CCCCCC",
"canvasborderthickness": "1",
"yaxismaxvalue": "30000",
"captionpadding": "30",
"yaxisvaluespadding": "15",
"legendshadow": "0",
"legendborderalpha": "0",
"palettecolors": "#f8bd19,#008ee4,#33bdda,#e44a00,#6baa01,#583e78",
"showplotborder": "0",
"showborder": "0"
},
"categories": [
{
"category": [
{
"label": "7"
},
{
"label": "8"
},
{
"label": "9"
},
{
"label": "10"
},
{
"label": "11"
},
{
"label": "12"
},
{
"label": "13"
}
]
}
],
"dataset": [
{
"seriesname": "Input",
"data": [
{
"value": "22314"
},
{
"value": "36395"
},
{
"value": "32661"
},
{
"value": "34895"
},
{
"value": "30300"
},
{
"value": "31011"
},
{
"value": "16363"
}
]
},
{
"seriesname": "Output",
"data": [
{
"value": "18537"
},
{
"value": "29931"
},
{
"value": "28518"
},
{
"value": "29793"
},
{
"value": "26538"
},
{
"value": "26898"
},
{
"value": "13716"
}
]
},
{
"seriesname": "InTarget",
"renderas": "Line",
"data": [
{
"value": "6500"
},
{
"value": "6500"
},
{
"value": "6500"
},
{
"value": "6500"
},
{
"value": "6500"
},
{
"value": "6500"
},
{
"value": "6500"
}
]
},
{
"seriesname": "OutTarget",
"renderas": "Line",
"data": [
{
"value": "4875"
},
{
"value": "4875"
},
{
"value": "4875"
},
{
"value": "4875"
},
{
"value": "4875"
},
{
"value": "4875"
},
{
"value": "4875"
}
]
}
]
}
我想做的是:
- 将存储过程转换为数据表
- 将每列放入单独的数组中
- 按以下格式将数组转换为Json
public Series[] GetGraphData(string sp)
{
var connection = ConfigurationManager.ConnectionStrings["EFDbContext"].ConnectionString;
using (var da = new SqlDataAdapter("exec " + sp, connection))
{
var dt = new DataTable();
da.Fill(dt);
da.FillSchema(dt, SchemaType.Mapped);
Series[] arrSeries = new Series[dt.Columns.Count];
foreach(DataColumn dc in dt.Columns)
{
if (dc.Ordinal == 0)
{
//Category here
}
else
{
var strarr = dt.Rows.Cast<DataRow>().Select(row => row[dc.Ordinal]).ToList();
Series s = new Series()
{
seriesname = dc.ColumnName,
renderas = "Line",
data = strarr.Select(o => new SeriesValue { value = o.ToString() }).ToList()
};
arrSeries[dc.Ordinal] = s;
}
}
return arrSeries;
}
}
公共系列[]GetGraphData(字符串sp)
{
var connection=ConfigurationManager.ConnectionString[“EFDbContext”].ConnectionString;
使用(var da=new-SqlDataAdapter(“exec”+sp,连接))
{
var dt=新数据表();
da.填充(dt);
FillSchema(dt,SchemaType.Mapped);
Series[]arrSeries=新系列[dt.Columns.Count];
foreach(数据列dc在dt.列中)
{
if(dc.Ordinal==0)
{
//分类在这里
}
其他的
{
var strarr=dt.Rows.Cast().Select(row=>row[dc.Ordinal]).ToList();
系列s=新系列()
{
seriesname=dc.ColumnName,
renderas=“Line”,
data=strarr.Select(o=>newseriesvalue{value=o.ToString()}).ToList()
};
arr级数[dc.序数]=s;
}
}
返回序列;
}
}
如您所说,我会将所有数据加载到datatable中,然后创建一个Series对象:
class Series{
public string seriesname{get;set;}
public string renderas{get;set;}
public IList<SeriesValue> data{get;set;}
}
class SeriesValue{
public string value{get;set;}
}
类系列{
公共字符串序列名{get;set;}
公共字符串renderas{get;set;}
公共IList数据{get;set;}
}
类序列值{
公共字符串值{get;set;}
}
并将序列数组返回到前端,序列化为JSON。然后您就已经构建了数据集
数组,不需要对其进行任何其他处理
我认为性能瓶颈在于从数据库加载数据并将其发送到客户端。。实际转换为json在总体方案中并不重要。谢谢你的回答,你能看看我的代码(我编辑的问题)吗?如何将列值加载到IList?