我有一个 MVC 应用程序,我需要能够在视图中显示各种记录。为此,我使用了内置的 Webgrid 控件。我面临的问题是从数据库返回的 Datatable 中获取数据,并将其转换为网格的 IEnumerable。我在 SO 上遇到了一种将其转换为 List Dynamic 类型的方法,该方法似乎运行良好,但在显示超过 6 列数据时遇到了问题:
public static dynamic serializeToDynamic(DataTable dt)
{
var result = new List<dynamic>();
foreach (System.Data.DataRow row in dt.Rows)
{
var obj = (IDictionary<string, object>)new System.Dynamic.ExpandoObject();
foreach (System.Data.DataColumn col in dt.Columns)
{
obj.Add(col.ColumnName, row[col.ColumnName]);
}
result.Add(obj);
}
return result;
}
我有一个需要显示 28 列的网格,使用这种方法非常慢,加载页面需要将近一分钟。我没有找到任何替代方案,所以我继续为这些信息制作了一个模型,并将 DataTable 绑定到这个模型,这证明在大约 2 秒内加载速度要快得多。我宁愿不必使用强类型模型来显示这些数据,我的问题是有没有其他方法可以将 DataTable 转换为与 webgrid 一起使用?