高效將通用列表轉換為.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中文網其他相關文章!