ビューにさまざまなレコードを表示できるようにする必要がある 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 列を表示する必要があるグリッドがあり、この方法を使用すると非常に遅くなり、ページの読み込みに 1 分近くかかります。代替案を見つけることができなかったので、先に進んでこの情報用のモデルを作成し、DataTable をこのモデルにバインドしました。これにより、約 2 秒で読み込みが大幅に高速化されることが証明されました。このデータを表示するためだけに厳密に型指定されたモデルを使用する必要はありません。私の質問は、DataTable を webgrid で動作するように変換する他の方法はありますか?