在 .NET 中將列表轉換為數據表
在 .NET 開發中,將泛型列表轉換為數據表是一種常見需求。以下是如何使用 FastMember 實現此操作:
<code class="language-csharp">using FastMember; IEnumerable<sometype> data = ...; DataTable table = new DataTable(); using (var reader = ObjectReader.Create(data)) { table.Load(reader); }</code>
FastMember 的元編程 API 優化了此過程,以實現最大性能。您可以指定要包含的特定成員:
<code class="language-csharp">using FastMember; IEnumerable<sometype> data = ...; DataTable table = new DataTable(); using (var reader = ObjectReader.Create(data, "Id", "Name", "Description")) { table.Load(reader); }</code>
替代方法
反射
<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++) { PropertyDescriptor prop = props[i]; row[i] = prop.GetValue(item); } table.Rows.Add(row); } return table; }</code>
為了提高性能,可以啟用 HyperDescriptor:
<code class="language-csharp">Hyper.ComponentModel.HyperTypeDescriptionProvider.Add(typeof(MyData));</code>
請注意,以上代碼片段僅供參考,實際應用中可能需要根據具體情況進行調整。 選擇哪種方法取決於您的性能需求和代碼複雜度的偏好。 FastMember 通常在性能方面表現更佳,而反射方法更易於理解和維護,但性能可能較低。
以上是如何有效地將列表轉換為.NET中的DataTables?的詳細內容。更多資訊請關注PHP中文網其他相關文章!