DataTable转成List集合
解一:
public class ModelConvertHelper<T> where T : new() // 此处一定要加上new() { public static IList<T> ConvertToModel(DataTable dt) { IList<T> ts = new List<T>();// 定义集合 Type type = typeof(T); // 获得此模型的类型 string tempName = ""; 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 != DBNull.Value) pi.SetValue(t, value, null); } } ts.Add(t); } return ts; } }
解二:
/// <summary> /// DataTable 转换为List 集合 /// </summary> /// <typeparam name="TResult">类型</typeparam> /// <param name="dt">DataTable</param> /// <returns></returns> public static List<TResult> ToList<TResult>(DataTable dt) where TResult : class, new() { //创建一个属性的列表 List<PropertyInfo> prlist = new List<PropertyInfo>(); //获取TResult的类型实例 反射的入口 Type t = typeof(TResult); //获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加入到属性列表 Array.ForEach<PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) prlist.Add(p); }); //创建返回的集合 List<TResult> oblist = new List<TResult>(); foreach (DataRow row in dt.Rows) { //创建TResult的实例 TResult ob = new TResult(); //找到对应的数据 并赋值 prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) { Type tt = row[p.Name].GetType(); date = tt.Name; } if (date == "DateTime") { // if (p.Name == "WorkingDate" || p.Name == "CreateDate" || p.Name == "RptDate" || p.Name == "UpdateDate") // { // p.SetValue(ob, row[p.Name].ToString(), null); // } // else // { try { p.SetValue(ob, Convert.ToDateTime(row[p.Name]), null); } catch { } //} } else if (date == "Int32") { //if (p.Name == "IsErr" || p.Name == "State" || p.Name == "SourceType") //{ // p.SetValue(ob, row[p.Name].ToString(), null); //} //else //{ try { p.SetValue(ob, Convert.ToInt32(row[p.Name]), null); } catch { } //} } else if (date == "Decimal") { // if (p.Name == "IsErr") // { try { p.SetValue(ob, Convert.ToDecimal(row[p.Name]), null); } catch { } // } // else // { //p.SetValue(ob, row[p.Name].ToString(), null); //} } else { try { p.SetValue(ob, row[p.Name], null); } catch { } } }); //放入到返回的集合中. oblist.Add(ob); } return oblist; }
解二亲测,解一待测!