To convert a DataTable into List the most important thing you have to take care is:
- Column Name of DataTable and Attributes of Class must be same.
- Order of Column of DataTable and Attributes of Class must be same.
- Type of Column of DataTable and Attributes of Class must be same.
- Total number of Column of DataTable and Attributes of Class must be same.
Below code snippet is a generic method of converting a DataTable to List<T> where T is Class.
public DataTable ConvertToDataTable<T>(IList<T> data)
{
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
foreach (PropertyDescriptor prop in properties)
table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
foreach (T item in data)
{
DataRow row = table.NewRow();
foreach (PropertyDescriptor prop in properties)
row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
table.Rows.Add(row);
}
return table;
}