Heim >Backend-Entwicklung >C++ >Wie konvertiert man ein IEnumerable effizient in eine DataTable in C#?

Wie konvertiert man ein IEnumerable effizient in eine DataTable in C#?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-20 00:24:14581Durchsuche

How to Efficiently Convert an IEnumerable to a DataTable in C#?

Effiziente Konvertierung von IEnumerable in DataTable in C#

In diesem Artikel wird untersucht, wie IEnumerable-Sammlungen effizient in DataTables konvertiert werden. Obwohl Reflexion eine Methode bietet, ist sie ineffizient.

Der folgende Code bietet eine optimiertere Lösung:

<code class="language-csharp">public static DataTable ToDataTable<T>(this IEnumerable<T> items)
{
    // 创建DataTable并收集属性
    DataTable table = new DataTable(typeof(T).Name);
    PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);

    // 从属性添加列
    foreach (var prop in props)
    {
        Type propType = prop.PropertyType;

        // 处理可空类型
        if (propType.IsGenericType && propType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
            propType = new NullableConverter(propType).UnderlyingType;

        table.Columns.Add(prop.Name, propType);
    }

    // 从属性值添加数据行
    foreach (var item in items)
    {
        object[] values = new object[props.Length];
        for (int i = 0; i < props.Length; i++)
        {
            values[i] = props[i].GetValue(item, null);
        }
        table.Rows.Add(values);
    }

    return table;
}</code>

Diese Erweiterungsmethode verarbeitet Konvertierungen effizient, einschließlich der Verarbeitung von Nullable-Werten. Die Berücksichtigung von Nullable-Typen gewährleistet Datenintegrität und zuverlässige Ergebnisse.

Das obige ist der detaillierte Inhalt vonWie konvertiert man ein IEnumerable effizient in eine DataTable in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn