예제 #1
0
        /// <summary>
        /// 将DataTable转为List
        /// </summary>
        /// <typeparam name="T">实体类(必须有默认构造参数)</typeparam>
        /// <param name="dt">DataTable</param>
        /// <returns></returns>
        public static List <T> ToList <T>(DataTable dt) where T : new()
        {
            List <T> list = new List <T>();

            if (dt == null || dt.Rows.Count == 0)
            {
                return(list);
            }

            foreach (DataRow dr in dt.Rows)
            {
                T t = new T();
                foreach (PropertyInfo prop in typeof(T).GetProperties())
                {
                    if (dr.Table.Columns.Contains(prop.Name))
                    {
                        GetSetter <T>(prop)(t, dr[prop.Name]);
                    }
                }
                list.Add(t);
            }

            return(list);
        }
예제 #2
0
        /// <summary>
        /// 高性能版构造对象,速度性能显著提升
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="source"></param>
        /// <returns></returns>
        public static List <T> ConvertDataTableToObject <T>(DataTable source) where T : class, new()
        {
            List <T> list = new List <T>();
            Type     t    = typeof(T);

            foreach (DataRow dr in source.Rows)
            {
                T item = new T();
                foreach (var prop in t.GetProperties())
                {
                    string MapperName = GetMapperName(prop);
                    if (string.IsNullOrEmpty(MapperName))
                    {
                        MapperName = prop.Name;
                    }
                    if (dr.Table.Columns.Contains(MapperName) && !IsDBNull(dr[MapperName]))
                    {
                        GetSetter <T>(prop)(item, dr[MapperName]);
                    }
                }
                list.Add(item);
            }
            return(list);
        }
예제 #3
0
 public static void Set <TValue>(TImplementation instance, string propertyName, TValue value)
 {
     GetSetter <TValue>(propertyName)(instance, value);
 }
예제 #4
0
 public static void Set <TValue>(TType instance, string propertyName, TValue value)
 {
     GetSetter <TValue>(propertyName)(instance, value);
 }
 public static ITrackingAction GetTrackingPropertyUpdateV2 <TObject, TValue>(this TObject item, TValue field, TValue value, string propertyName) =>
 new PropertyTrackingAction <TObject, TValue>(field, value, item, (x, y) => GetSetter <TObject, TValue>(propertyName)(x, y));