对一个对象实体进行赋值
/// <summary> /// 对一个对象实体进行赋值 /// </summary> /// <param name="obj">对象实体</param> /// <param name="row">行数据</param> /// <param name="Fields">查询字段</param> /// <returns>赋值后的对象实体</returns> public static object DataRowToModel(object obj, System.Data.DataRow row, ref string errMsg, params string[] Fields) { if (obj == null || row == null || Fields == null || Fields.Length <= 0) { errMsg = "传入参数不完整!"; return null; } try { for (int i = 0, j = Fields.Length; i < j; i++) { string field = Fields[i].ToString();//字段 bool exist = row.Table.Columns.Contains(field);//是否存在 if (exist && row[field] != null) { string value = row[field].ToString(); System.Reflection.PropertyInfo[] fields = obj.GetType().GetProperties(); foreach (System.Reflection.PropertyInfo pt in fields) { if (pt.Name.ToUpper().Equals(field.ToUpper())) { string tp = pt.PropertyType.FullName; #region 数据类型转换 switch (tp) { case "System.DateTime": case "System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]": case "System.Nullable`1[[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]": { //可空DateTime类型 pt.SetValue(obj, Convert.ToDateTime(value), null); } break; case "System.Int64": case "System.Nullable`1[[System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]": case "System.Nullable`1[[System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]": { //可空int类型 pt.SetValue(obj, Convert.ToInt64(value), null); } break; case "System.Int32": case "System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]": case "System.Nullable`1[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]": { //可空int类型 pt.SetValue(obj, Convert.ToInt32(value), null); } break; case "System.Decimal": case "System.Nullable`1[[System.Decimal, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]": case "System.Nullable`1[[System.Decimal, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]": { //可空Decimal类型 pt.SetValue(obj, Convert.ToDecimal(value), null); } break; case "System.Boolean": case "System.Nullable`1[[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]": case "System.Nullable`1[[System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]": { //可空Boolean类型 pt.SetValue(obj, Convert.ToBoolean(value), null); } break; case "System.Double": { pt.SetValue(obj, Convert.ToDouble(value), null); } break; case "System.Char": { pt.SetValue(obj, Convert.ToChar(value), null); } break; case "System.String": { pt.SetValue(obj, Convert.ToString(value), null); } break; default: pt.SetValue(obj, value, null); break; } #endregion } } } } } catch (Exception ex) { errMsg = ex.Message; Utils.LogHelper.Error("DataRowToModel", "实体转换出错", "异常错误:" + ex.ToString()); return null; } return obj; }