コード例 #1
0
ファイル: TableInfo.cs プロジェクト: boxuanli/OptManage
        public static Entity_Table Get(Type _Type)
        {
            var _Entity_Table = new Entity_Table();
            var _TableAttr    = ReflexHelper.GetTableAttribute(_Type);

            _Entity_Table.TableName = _TableAttr == null ? _Type.Name : _TableAttr.TableName;
            var _Fields = ReflexHelper.GetPropertyInfos(_Type);

            foreach (var item in _Fields)
            {
                var _FieldAttribute = (Attribute.GetCustomAttribute(item, typeof(FieldAttribute)) as FieldAttribute);
                if (_FieldAttribute == null)
                {
                    continue;
                }
                var _FieldInfo = new Entity_FieldInfo()
                {
                    Alias        = _FieldAttribute.Alias,
                    FieldName    = item.Name,
                    FieldType    = item.PropertyType,
                    IsIdentity   = _FieldAttribute.IsIdentity,
                    IsIgnore     = _FieldAttribute.IsIgnore,
                    IsPrimaryKey = _FieldAttribute.IsPrimaryKey
                };

                if (_FieldAttribute.IsPrimaryKey)
                {
                    _Entity_Table.KeyFieldName = _FieldInfo.FieldName;
                    _Entity_Table.KeyFieldInfo = _FieldInfo;
                }
                _Entity_Table.Fields.Add(_FieldInfo);
            }
            return(_Entity_Table);
        }
コード例 #2
0
        /// <summary>
        /// 将 datatable 转换为 list
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="table"></param>
        /// <returns></returns>
        public static List <T> ToList <T>(this DataTable table) where T : class, new()
        {
            var list = new List <T>();

            var _Entity      = ReflexHelper.CreateInstance <T>();
            var propertyInfo = _Entity.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);

            foreach (DataRow dr in table.Rows)
            {
                _Entity = ReflexHelper.CreateInstance <T>();
                foreach (var item in propertyInfo)
                {
                    string AttrName = item.Name;
                    foreach (DataColumn dc in dr.Table.Columns)
                    {
                        if (AttrName != dc.ColumnName)
                        {
                            continue;
                        }
                        if (dr[dc.ColumnName] != DBNull.Value)
                        {
                            item.SetValue(_Entity, dr[dc.ColumnName], null);
                        }
                        else
                        {
                            item.SetValue(_Entity, null, null);
                        }
                    }
                }
                list.Add(_Entity);
            }
            return(list);
        }
コード例 #3
0
        /// <summary>
        /// DataRow 转换 实体
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dr"></param>
        /// <returns></returns>
        public static T ToEntity <T>(this DataRow dr) where T : class, new()
        {
            var _Entity = ReflexHelper.CreateInstance <T>();
            var list    = _Entity.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);

            if (list.Length == 0)
            {
                throw new Exception("找不到任何 公共属性!");
            }

            foreach (var item in list)
            {
                string AttrName = item.Name;
                foreach (DataColumn dc in dr.Table.Columns)
                {
                    if (AttrName != dc.ColumnName)
                    {
                        continue;
                    }
                    if (dr[dc.ColumnName] != DBNull.Value)
                    {
                        item.SetValue(_Entity, dr[dc.ColumnName], null);
                    }
                }
            }
            return(_Entity);
        }
コード例 #4
0
ファイル: ReflexHelper.cs プロジェクト: boxuanli/OptManage
        /// <summary>
        /// 对象 转换为 MemberInitExpression
        /// </summary>
        /// <param name="_type"></param>
        /// <returns></returns>
        public static MemberInitExpression MemberInit <T>(T _entity)
        {
            var proInfo = ReflexHelper.GetPropertyInfos(typeof(T));

            var list = new List <MemberBinding>();

            foreach (var item in proInfo)
            {
                list.Add(Expression.Bind(item, Expression.Constant(item.GetValue(_entity), item.PropertyType)));
            }

            var newExpr = Expression.New(typeof(T));

            return(Expression.MemberInit(newExpr, list));
        }
コード例 #5
0
ファイル: ReflexHelper.cs プロジェクト: boxuanli/OptManage
 /// <summary>
 /// 获取 对象 中 某个属性得 标记
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="_type"></param>
 /// <param name="_name"></param>
 /// <returns></returns>
 public static T GetAttribute <T>(Type _type, string _name) where T : Attribute
 {
     return(ReflexHelper.GetPropertyInfo(_type, _name).GetCustomAttribute(typeof(T)) as T);
 }
コード例 #6
0
ファイル: ReflexHelper.cs プロジェクト: boxuanli/OptManage
 /// <summary>
 /// 获取 对象 属性上 标记 集合
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="_type"></param>
 /// <param name="_name"></param>
 /// <returns></returns>
 public static List <T> GetAttributes <T>(Type _type, string _name) where T : Attribute
 {
     return(ReflexHelper.GetPropertyInfo(_type, _name).GetCustomAttributes <T>(false).ToList());
 }
コード例 #7
0
ファイル: ReflexHelper.cs プロジェクト: boxuanli/OptManage
 /// <summary>
 /// 设置 值
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="_entity"></param>
 /// <param name="_name"></param>
 /// <param name="_val"></param>
 public static void SetValue <T>(T _entity, string _name, object _val)
 {
     ReflexHelper.GetPropertyInfo(typeof(T), _name).SetValue(_entity, _val);
 }
コード例 #8
0
ファイル: ReflexHelper.cs プロジェクト: boxuanli/OptManage
 /// <summary>
 /// 获取 值
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="_entity"></param>
 /// <param name="_name"></param>
 /// <returns></returns>
 public static object GetValue <T>(T _entity, string _name)
 {
     return(ReflexHelper.GetPropertyInfo(typeof(T), _name).GetValue(_entity));
 }