【发布时间】:2014-02-28 15:37:29
【问题描述】:
很难解释,但是这里有……我们目前正在使用一个返回动态列的过程, 即列标题是日期,列数可以是x
Type 12/12/2014 19/12/2014 26/12/2014
1 2 3 1
2 5 4 3
使用数据阅读器处理此问题的最佳方法是什么。 目前,数据库团队正在以当前格式返回数据,列是动态的,我们知道一行在哪里结束,新的一行从类型开始,所以,类型 1 是一行,类型 2 是第二行,依此类推:-
column data Type
12/12/2014 2 1
19/12/2014 3 1
26/12/2014 1 1
12/12/2014 5 2
19/12/2014 4 2
26/12/2014 3 2
在 .net 应用程序中,我们构建了一个列表列表(代表列和行)
List<TableColumn> ltc = new List<TableColumn>();
List<List<TableColumn>> lltc = new List<List<TableColumn>>();
using (SqlDataReader rdr = (SqlDataReader)Database.ExecuteReader(com))
{
while (rdr.Read())
{
// If new ID or ID doesnt == the previous then create a new row
if (oc == "" || oc != rdr["Type"].ToSafeString())
{
if (oc != "")
{
lltc.Add(ltc);
ltc = new List<TableColumn>();
}
}
ltc.Add(new TableColumn(rdr["Column"].ToSafeString(), rdr["Data"].ToSafeString());
oc = rdr["type"].ToSafeString();
}
}
该过程可以返回相当数量的数据,(例如 8 行 288 列)
在时间方面,从数据库返回数据大约需要 1.5 秒,然后通过数据读取器实际创建列表列表需要 1.2 秒。
我的问题是,有没有更有效的方法来处理这个问题?因为创建模型需要 1.2 + seconds min 似乎很长.. 数据实际上会以表格的形式显示在前端。
补充一下,这是一个 Web API MVC 4 应用程序。
任何建议将不胜感激。
【问题讨论】:
-
这称为
Pivoting,可以在SQL中完成 -
是的,但是,如果将数据作为普通表返回,则无法创建模型,因为我们不知道返回了多少列,它们是动态的,我想我'我说得对吗..?
-
我必须承认我不是一个 ASP 人,我来自 winforms。但是您可以肯定地在 ASP.NET 中绑定一个网格(并且它可以自动填充列)。您可以返回
DataTable并将 UI 网格绑定到它。 -
如果数据层返回一个数据表,并且您只需绑定到该调用即可。但是,我们的应用程序在 web api 中收集数据,将其放入 API 模型,然后传递使用 JSON 到前端,但是构建该模型需要遍历数据,这似乎几乎与 sp 获取它所需的时间一样长..
-
在 SQL 端透视数据,然后将数据绑定到 datagrid。换句话说,首先让 SQL 以您需要的格式生成数据。
标签: c# sql .net asp.net-mvc ado.net