Feedback

IEnumerable zu DataTable

Sprache: C#

Diese Erweiterungsmethode für IEnumerable<T> erstellt ein DataTable aus der Auflistung. Dabei werden alle öffentlichen Instanz-Eigenschaften übertragen. [b]Benötigte Namespaces[/b] System.Collections.Generic System.Data System.Reflection
/// <summary>
/// Erstellt ein <see cref="System.Data.DataTable"/> aus der angegebenen Auflistung.
/// </summary>
/// <typeparam name="T">Der Typ der Elemente in der Auflistung, deren öffentlichen Instanz-Eigenschaften in das <see cref="System.Data.DataTable"/> übertragen werden sollen.</typeparam>
/// <param name="source">Die Quellauflistung deren Elemente übertragen werden sollen.</param>
/// <returns>Ein DataTable mit den Elementen aus der angegebenen Auflistung.</returns>
public static DataTable ToDataTable<T>(this IEnumerable<T> source)
{
    var table = new DataTable();

    int i = 0;
    var props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
    foreach (var prop in props)
    {
        table.Columns.Add(new DataColumn(prop.Name, prop.PropertyType));
        ++i;
    }

    foreach (var item in source)
    {
        var values = new object[i];
        i = 0;
        foreach (var prop in props)
            values[i++] = prop.GetValue(item);
        table.Rows.Add(values);
    }

    return table;
}
/// <summary>
/// Erstellt ein <see cref="System.Data.DataTable"/> aus der angegebenen Auflistung.
/// </summary>
/// <typeparam name="T">Der Typ der Elemente in der Auflistung, deren öffentlichen Instanz-Eigenschaften in das <see cref="System.Data.DataTable"/> übertragen werden sollen.</typeparam>
/// <param name="source">Die Quellauflistung deren Elemente übertragen werden sollen.</param>
/// <returns>Ein DataTable mit den Elementen aus der angegebenen Auflistung.</returns>
public static DataTable ToDataTable<T>(this IEnumerable<T> source)
{
    var table = new DataTable();

    int i = 0;
    var props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
    foreach (var prop in props)
    {
        table.Columns.Add(new DataColumn(prop.Name, prop.PropertyType));
        ++i;
    }

    foreach (var item in source)
    {
        var values = new object[i];
        i = 0;
        foreach (var prop in props)
            values[i++] = prop.GetValue(item);
        table.Rows.Add(values);
    }

    return table;
}