コード例 #1
0
        /// <summary>
        /// Convert Data Table to model list
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="source"></param>
        /// <returns></returns>
        public static List <T> DataTableToList <T>(this DataTable source) where T : class, new()
        {
            List <T> itemlist = null;

            if (source == null || source.Rows.Count == 0)
            {
                return(itemlist);
            }
            itemlist = new List <T>();
            T    item       = null;
            Type targetType = typeof(T);

            PropertyInfo[] props = targetType.GetProperties();

            DataRowCollection drs = source.Rows;
            int columnsCount      = source.Columns.Count;

            foreach (DataRow dr in drs)
            {
                item = new T();
                for (int i = 0; i < columnsCount; i++)
                {
                    string       colName      = dr.Table.Columns[i].ColumnName;
                    PropertyInfo propertyInfo = SetPropertyInfo(colName, props, targetType);

                    if (propertyInfo != null && dr[i] != DBNull.Value)
                    {
                        TableColumnNameAttribute tba = (TableColumnNameAttribute)propertyInfo.GetCustomAttribute(typeof(TableColumnNameAttribute));

                        if (tba.ColType == ColumnType.Date)
                        {
                            propertyInfo.SetValue(item, Convert.ToDateTime(dr[i]).ToString("MM/dd/yyyy"), null);
                        }
                        else
                        {
                            propertyInfo.SetValue(item, dr[i].ToString(), null);
                        }
                    }
                }
                itemlist.Add(item);
            }
            return(itemlist);
        }
コード例 #2
0
        /// <summary>
        /// Set PropertyInfo
        /// </summary>
        /// <param name="colName"></param>
        /// <param name="props"></param>
        /// <param name="targetType"></param>
        /// <returns></returns>
        public static PropertyInfo SetPropertyInfo(string colName, PropertyInfo[] props, Type targetType)
        {
            PropertyInfo propertyInfo = null;

            foreach (var prop in props)
            {
                var customAttr = prop.GetCustomAttribute(typeof(TableColumnNameAttribute));
                if (customAttr != null)
                {
                    TableColumnNameAttribute tableCustomAttr = (TableColumnNameAttribute)customAttr;
                    if (tableCustomAttr.DBColName == colName)
                    {
                        propertyInfo = prop;
                        break;
                    }
                }
            }
            if (null == propertyInfo)
            {
                propertyInfo = targetType.GetProperty(colName);
            }
            return(propertyInfo);
        }