首页 > 后端开发 > C++ > 如何有效地将列表转换为.NET中的DataTables?

如何有效地将列表转换为.NET中的DataTables?

Susan Sarandon
发布: 2025-01-30 21:51:12
原创
607 人浏览过

How Can I Efficiently Convert Lists to DataTables in .NET?

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

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板