Esempio n. 1
0
        /// <summary>
        /// 直接属性转换
        /// </summary>
        /// <typeparam name="T">实体类</typeparam>
        /// <param name="lst">数据</param>
        /// <returns></returns>
        public static DataTable FromEntityToTable <T>(this IList <T> lst)
        {
            DataTable dt = new DataTable();

            if (!cacheDataTable.ContainsKey(typeof(T).FullName))
            {
                var properties = typeof(T).GetProperties();
                foreach (var p in properties)
                {
                    var cur = Nullable.GetUnderlyingType(p.PropertyType);
                    dt.Columns.Add(p.Name, cur == null ? p.PropertyType : cur);
                }
            }
            else
            {
                dt = cacheDataTable[typeof(T).FullName].Clone();
            }
            //1.如果调用table转换
            //LoadDataTable<T> load = (LoadDataTable<T>)PersonToDataTable<T>().CreateDelegate(typeof(LoadDataTable<T>));
            EntityDataTable <T> load = Find <T>();

            foreach (var item in lst)
            {
                load(dt, item);
            }
            ////2.如果调用行转换(控制度大些)
            //LoadDataRow<T> loadrow = (LoadDataRow<T>)PersonToDataRow<T>().CreateDelegate(typeof(LoadDataRow<T>));
            //foreach (var item in lst)
            //{
            //    var row = dt.NewRow();
            //    loadrow(row, item);
            //    dt.Rows.Add(row);
            //}
            return(dt);
        }
Esempio n. 2
0
        /// <summary>
        /// 忽略特性的查找
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        private static EntityDataTable <T> Find <T>()
        {
            EntityDataTable <T> load = null;
            object v    = null;
            string name = typeof(T).FullName;

            if (cache.TryGetValue(name, out v))
            {
                load = v as EntityDataTable <T>;
            }
            else
            {
                load        = (EntityDataTable <T>)EntityToDataTableEmit <T>().CreateDelegate(typeof(EntityDataTable <T>));
                cache[name] = load;
            }
            return(load);
        }