datatable
.netでは、汎用リストまたは列挙されたオブジェクトをデータテーブルオブジェクトに変換する必要があるシーンに遭遇する可能性があります。静的な方法はありませんが、この変換を実行でき、複数の方法を使用できます。fastmember
reflection を使用します
<code class="language-csharp">using FastMember; using System.Data; IEnumerable<sometype> data = ...; DataTable table = new DataTable(); using (var reader = ObjectReader.Create(data)) { table.Load(reader); }</code>.NETフレームワーク4.5の前に、反射を使用して、汎用リストからダイナミックにデータテーブルを作成できます。 fastmemberと比較して、これは低効率の方法です:
この関数は、任意の汎用リストを呼び出して、リストオブジェクト属性に基づいてデータテーブルを生成できます。
<code class="language-csharp">public static DataTable ToDataTable<T>(this IList<T> data) { PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T)); DataTable table = new DataTable(); for (int i = 0; i < props.Count; i++) { PropertyDescriptor prop = props[i]; table.Columns.Add(prop.Name, prop.PropertyType); } foreach (T item in data) { DataRow row = table.NewRow(); for (int i = 0; i < props.Count; i++) { row[i] = props[i].GetValue(item); } table.Rows.Add(row); } return table; }</code>パフォーマンスの注意事項
FastMemberメソッドは、反射方法よりもはるかに高速です。ただし、データのボリュームや列の数などの要因によってパフォーマンス特性が異なる場合があるため、Datatableのパフォーマンスには改善の余地があります。
以上が.NETのジェネリックリストをDatatablesに効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。