Very often we need to convert List to DataTable, so that we can pass DataTable to Stored Procedure as Paramter in the form of tvp. In this example i will show you how to convert List to datatable.
public static DataTable ConvertToDataTable<TSource>(IEnumerable<TSource> source)
{
if (source == null)
return null;
var props = typeof(TSource).GetProperties();
var dt = new DataTable();
//dt.Columns.AddRange(pi.Name,Nullable.GetUnderlyingType(
//pi.PropertyType) ??pi.PropertyType);
dt.Columns.AddRange(
props.Select(p => new DataColumn(p.Name, Nullable.GetUnderlyingType(p.PropertyType)?? p.PropertyType)).ToArray()
);
source.ToList().ForEach(
i=> dt.Rows.Add(props.Select(p => p.GetValue(i, null)).ToArray())
);
return dt;
}