首頁 > 後端開發 > 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板