在 .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中文网其他相关文章!