• 泛型处理ToEntity


         #region 泛型处理
            /// <summary>
            /// 实体对象赋值转换
            /// 参数实体必需包含无参构造函数,否则出错
            /// </summary>
            /// <typeparam name="T">实体对象</typeparam>
            /// <returns></returns>
            public static T CopyTo<T>(this T t)
            {
                Type type = typeof(T);
                T obj = (T)Activator.CreateInstance(type, null);
                foreach (PropertyInfo p in type.GetProperties())
                {
                    dynamic tt = t.GetType().GetProperty(p.Name).GetValue(t, null);
                    p.SetValue(obj, tt, null);
                }
                return obj;
            }
            #endregion
            #region DataTale
            /// <summary>
            /// 将DataTable转换成实体【DataTale中列数可以小于实体中列数】
            /// DataTabele中列名应与实体属性名一一对应
            /// </summary>
            /// <typeparam name="Entity">实体对象</typeparam>
            /// <param name="dt">数据DataTable</param>
            /// <returns>实体列表</returns>
            public static List<Entity> ToEntity<Entity>(this DataTable dt, bool IsDefault = false)
            {
                Type type = typeof(Entity);
                List<Entity> list = new List<Entity>();
                foreach (DataRow r in dt.Rows)
                {
                    Entity obj = (Entity)Activator.CreateInstance(type, null);
                    foreach (DataColumn c in dt.Columns)
                    {
                        try
                        {
                            PropertyInfo p = type.GetProperty(c.ColumnName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
                            if (p == null)
                            {
                                continue;
                            }
                            object val = r[c.ColumnName];
                            if (val == DBNull.Value && IsDefault && p.PropertyType.Name.Contains("Nullable"))
                            {
                                string strType = p.PropertyType.ToString().Split('[')[1].Replace("]", "");
                                val = p.PropertyType.IsValueType ? Activator.CreateInstance(Type.GetType(strType)) : null;
                            }
                            int enumVal = 0;
                            if (p.PropertyType.IsEnum && int.TryParse(val.ToString(), out enumVal))
                            {//枚举赋值处理
                                val = Enum.ToObject(p.PropertyType, enumVal);
                            }
                            if (val == DBNull.Value && !p.PropertyType.Name.Contains("Nullable") && p.PropertyType.IsValueType)//不允许为空的值类型使用默认值
                            {
                                string strType = p.PropertyType.ToString().Replace("[", "").Replace("]", "");//得到类型名
                                val = Activator.CreateInstance(Type.GetType(strType));
                            }
                            p.SetValue(obj, Convert.ChangeType(val, p.PropertyType.Name.Contains("Nullable") ? Nullable.GetUnderlyingType(p.PropertyType) : p.PropertyType), null);
                        }
                        catch (Exception ex)
                        {
                            LogUtil.Log(ex.Message + ex.StackTrace + c.ColumnName, "Entity");
                        }
                    }
                    list.Add(obj);
                }
                return list;
            }
    
            /// <summary>
            /// 将DataTable转换成实体【DataTale中列数可以小于实体中列数】
            /// DataTabele中列名应与实体属性名一一对应
            /// </summary>
            /// <typeparam name="Entity">实体对象</typeparam>
            /// <param name="dt">数据DataTable</param>
            /// <returns>实体列表</returns>
            public static Entity Default<Entity>(this DataTable dt, bool IsDefault = false)
            {
                List<Entity> list = dt.ToEntity<Entity>(IsDefault);
                Entity en = default(Entity);
                if (list != null && list.Count > 0)
                {
                    en = list[0];
                }
                return en;
            }
     
            public static DataTable ToDataTable<T>(this List<T> list, bool isStoreDB = true)
            {
                Type tp = typeof(T);
                PropertyInfo[] proInfos = tp.GetProperties();
                DataTable dt = new DataTable();
                foreach (var item in proInfos)
                {
                    dt.Columns.Add(item.Name, item.PropertyType); //添加列明及对应类型
                }
                foreach (var item in list)
                { 
                    DataRow dr = dt.NewRow();
                    foreach (var proInfo in proInfos)
                    { 
                        object obj = proInfo.GetValue(item,null);
                        if (obj == null)
                        {
                            continue;
                        } 
                        if (isStoreDB && proInfo.PropertyType == typeof(DateTime) && Convert.ToDateTime(obj) < Convert.ToDateTime("1753-01-01"))
                        {
                            continue;
                        } 
                        dr[proInfo.Name] = obj; 
                    }
                    dt.Rows.Add(dr);
                }
                return dt;
            }
     
            #endregion
  • 相关阅读:
    C语言程序设计第一次作业
    C语言I博客作业09
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言II博客作业03
    C语言II博客作业02
    C语言II博客作业01
    学期总结
  • 原文地址:https://www.cnblogs.com/zzgxl/p/10190213.html
Copyright © 2020-2023  润新知