public static List<T> Convert<T>(DataTable dataTable)
{
List<T> lstEntity = new List<T>();
if (dataTable == null) return lstEntity;
Type classType = typeof(T);
PropertyInfo[] propertyInfos = classType.GetProperties();
if (propertyInfos.Count() == 0) return lstEntity; // there is no property to set value
List<DataColumn> columns = dataTable.Columns.Cast<DataColumn>().ToList();
foreach (DataRow row in dataTable.Rows)
{
T t = Activator.CreateInstance<T>();
foreach (PropertyInfo propertyInfo in propertyInfos)
{
Attribute[] attribs = Attribute.GetCustomAttributes(propertyInfo, true);
string propertyName = string.Empty;
if (attribs.ToList().IsNullOrEmpty())
propertyName = propertyInfo.Name;
else
propertyName = ((System.Xml.Serialization.XmlElementAttribute)(attribs[0])).ElementName;
DataColumn column = columns.Find(col => col.ColumnName == propertyName);
if (column != null)
propertyInfo.SetValue(t, (row[column].GetType().ToString().ToLower().Equals("system.dbnull") ? null : row[column]), null);
}
lstEntity.Add(t);
}
return lstEntity;
}System.Reflection can help you convert List of Entity from datatable.
