• 找到一段当初实现反射的代码


            /// <summary>
            /// 查询入口
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="sql"></param>
            /// <returns></returns>
            public static List<T> ModelFall<T>(string sql) where T : new()
            {
                //公共访问器
                CommonController cc = new CommonController();
                //得到的结果
                DataSet dataSet = cc.cmsMipService.ExecuteDataSet(sql);
                //进行反射
                return PutAllVal<T>(dataSet); ;
            }
            /// <summary>
            /// 遍历列
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="ds"></param>
            /// <returns></returns>
            public static List<T> PutAllVal<T>(DataSet ds) where T : new()
            {
                List<T> lists = new List<T>();
                if (ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow row in ds.Tables[0].Rows)
                    {
                        lists.Add(PutVal(new T(), row, ds.Tables[0]));
                    }
                }
                return lists;
            }
            /// <summary>
            /// 根据特性反射
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="entity"></param>
            /// <param name="row"></param>
            /// <param name="table"></param>
            /// <returns></returns>
            public static T PutVal<T>(T entity, DataRow row, DataTable table) where T : new()
            {
                //初始化 如果为null
                if (entity == null)
                {
                    entity = new T();
                }
                //得到类型
                Type type = typeof(T);
                //取得属性集合
                System.Reflection.PropertyInfo[] pi = type.GetProperties();
                foreach (PropertyInfo item in pi)
                {
                    object[] keys = item.GetCustomAttributes(typeof(TimesProperty), true);
                    string name = "";
                    if (keys.Length > 0)
                    {
                        TimesProperty a = new TimesProperty();
                        a = (TimesProperty)keys[0];
                        name = a.TableName;
                    }
                    else
                    {
                        name = item.Name;
                    }
                    if (table.Columns.Contains(name))
                    {
                        //给属性赋值
                        if (row[name] != null && row[name] != DBNull.Value)
                        {
                            if (item.PropertyType == typeof(System.Nullable<System.DateTime>))
                            {
                                item.SetValue(entity, Convert.ToDateTime(row[name].ToString()), null);
                            }
                            else
                            {
                                item.SetValue(entity, Convert.ChangeType(row[name], item.PropertyType), null);
                            }
                        }
                    }
                }
                return entity;
            }

    特性是这样写的。

    自定义特性

        [Serializable]
        [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = true)]
        public class TimesProperty : System.Attribute
        {
            public virtual string TableName { get; set; }
        }

    实体类里

    [TimesProperty(TableName = "ID")]
    public virtual long Id { get; set; }

    名称:多罗贝勒
    博客地址:http://www.cnblogs.com/objctccc/
    欢迎转载

  • 相关阅读:
    SQL Server 查看正在运行的事务信息的 2 种方法。
    SQL Server 查看正在运行的事务信息的 2 种方法。
    js防抖和限流
    js防抖和限流
    CSS cursor 属性
    CSS cursor 属性
    JS-中使用Math.round(x)保留1位小数点
    I/O系列教材 (一)- Java 的File类,以及常用方法
    异常处理系列教材 (五)- Java 自定义异常
    异常处理系列教材 (四)- java Throwable接口
  • 原文地址:https://www.cnblogs.com/objctccc/p/6115318.html
Copyright © 2020-2023  润新知