1. 程式人生 > >簡單的Datable轉List方法

簡單的Datable轉List方法

con dbn contain pre cat ble list concat col

public static class DataTableUtils<T> where T : new()
    {
        public static List<T> ConvertToModel(DataTable dt)
        {
            try
            {
                if (dt == null || dt.Rows.Count == 0)
                {
                    throw new Exception("DataTable is Null!
"); } List<T> ts = new List<T>(); Type type = typeof(T); string tempName = string.Empty; foreach (DataRow dr in dt.Rows) { T t = new T(); // 獲得此模型的公共屬性 PropertyInfo[] propertys = t.GetType().GetProperties();
foreach (PropertyInfo pi in propertys) { tempName = pi.Name; if (dt.Columns.Contains(tempName)) { if (!pi.CanWrite) continue;
object value = dr[tempName]; if (value is DBNull) continue; if (pi.PropertyType.Name.ToLower() == "string") { if (value.GetType().Name.ToLower() == "guid") { pi.SetValue(t, value.ToString(), null); } else if (value.GetType().Name.ToLower() == "datetime") { pi.SetValue(t, Convert.ToDateTime(value).ToString("yyyy-MM-dd HH:mm:ss"), null); } else { pi.SetValue(t, Convert.ToString(value), null); } } else if (pi.PropertyType.Name.ToLower() == "lookupmodel") { if (dt.Columns.Contains(string.Concat(tempName, "Name"))) { object valuename = dr[string.Concat(tempName, "Name")]; if (valuename != DBNull.Value) { LookUpModel lum = new LookUpModel(); lum.id = Convert.ToString(value); lum.name = Convert.ToString(valuename); pi.SetValue(t, lum, null); } else { throw new Exception(string.Format("The value of column ‘{0}‘ is null!", string.Concat(tempName, "Name"))); } } else { throw new Exception(string.Format("The column ‘{0}‘ dose not exist!", string.Concat(tempName, "Name"))); } } else if (pi.PropertyType.Name.ToLower() == "int32" || pi.PropertyType.Name.ToLower() == "nullable`1") { pi.SetValue(t, Convert.ToInt32(value), null); } else if (pi.PropertyType.Name.ToLower() == "decimal") { pi.SetValue(t, Convert.ToDecimal(value), null); } else if (pi.PropertyType.Name.ToLower() == "datetime") { pi.SetValue(t, Convert.ToDateTime(value), null); } else if (pi.PropertyType.Name.ToLower() == "boolean") { pi.SetValue(t, Convert.ToBoolean(value), null); } } } ts.Add(t); } return ts; } catch (Exception) { throw; } } }

簡單的Datable轉List方法