高效将通用列表转换为.NET中的DataTable
在.NET中,您可能会遇到需要将泛型列表或可枚举对象转换为DataTable对象的场景。虽然没有内置的静态方法可以进行这种转换,但可以采用多种方法。
在.NET Framework 4.5或更高版本中,您可以使用NuGet中的FastMember库。此库提供高性能的元编程功能:
<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 Framework 4.5之前,您可以使用反射从泛型列表动态创建DataTable。与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>
此函数可以调用任何泛型列表,生成一个基于列表对象属性的列的DataTable。
FastMember方法比基于反射的方法快得多。但是,DataTable的性能仍然有改进的空间,因为它的性能特征可能会根据数据量和列数等因素而有所不同。
以上是如何有效地将通用列表转换为.NET中的DataTables?的详细内容。更多信息请关注PHP中文网其他相关文章!