Diese Erweiterungsmethode für IEnumerable<T> erstellt ein DataTable aus der Auflistung. Dabei werden alle öffentlichen Instanz-Eigenschaften übertragen.
Benötigte Namespaces
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;
}
Kommentare zum Snippet