How to convert datatable to List using c# with generics

First we can start Generic methods creations like below manner


  public static List<T> ConvertDataTable<T>(DataTable dt)
        {
            List<T> lstData = new List<T>();
            foreach (DataRow row in dt.Rows)
            {
                T item = GetInnerItem<T>(row);
                lstData.Add(item);
            }
            return lstData;
        }



 private static T GetInnerItem<T>(DataRow dr)
        {
            Type temp = typeof(T);
            T obj = Activator.CreateInstance<T>();

            foreach (DataColumn column in dr.Table.Columns)
            {
                foreach (PropertyInfo pro in temp.GetProperties())
                {
                    if (pro.Name == column.ColumnName)
                    {
                        if (pro.PropertyType == typeof(Int64))
                        {
                            var valueToset = dr[column.ColumnName] == DBNull.Value ? 0 : Convert.ToInt64(dr[column.ColumnName]);
                            pro.SetValue(obj, valueToset, null);
                        }
                        else if (pro.PropertyType == typeof(Nullable<Decimal>))
                        {
                            var valueToset = dr[column.ColumnName] == DBNull.Value ? 0 : Convert.ToDecimal(dr[column.ColumnName].ToString().Replace(",", ""));
                            pro.SetValue(obj, valueToset, null);
                        }
                        else if (pro.PropertyType == typeof(Nullable<bool>))
                        {
                            var valueToset = dr[column.ColumnName] == DBNull.Value ? false : Convert.ToBoolean(dr[column.ColumnName].ToString());
                            pro.SetValue(obj, valueToset, null);
                        }
                        else if (pro.PropertyType == typeof(string))
                        {
                            var valueToset = dr[column.ColumnName] == DBNull.Value ? "" : dr[column.ColumnName].ToString();
                            pro.SetValue(obj, valueToset, null);
                        }
                        else if (pro.PropertyType == typeof(Nullable<DateTime>))
                        {
                            var valueToset = dr[column.ColumnName] == DBNull.Value ? DateTime.Now : Convert.ToDateTime(dr[column.ColumnName].ToString());
                            pro.SetValue(obj, valueToset, null);
                        }
                        else
                        {
                            pro.SetValue(obj, dr[column.ColumnName], null);
                        }
                    }
                    else
                        continue;
                }
            }
            return obj;
        }




Use case:


Public class Program

{

static void Main()
{
DataTable dt=new DataTable();// Here you may fill your data from any other source
 List<Employee> lstEmployees= ConvertDataTable<Employee>(dt);
console.Writeline(lstEmployees.count());
console.ReadKey();
}
}

Comments

Popular posts from this blog

Reverse Sentence using c#

How to write Pure java script Program?