Transform/DataRowTo.cs

(开头部分) 2KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using DataObject.Attrib;
using System.Text.RegularExpressions;

namespace DataObject.Transform
{
    /// <summary>
    /// 表格行信息转化
    /// </summary>
    public sealed class DataRowTo
    { 
        /// <summary>
        /// 表格行信息转化为实体对象
        /// </summary>
        /// <param name="dr">单行数据</param>
        /// <returns></returns>
        public static T SetData<T>(DataRow dr) {
            if (dr == null) return default(T);
            T t = System.Activator.CreateInstance<T>();
            SetData(dr, t);
            return t;
        }

        /// <summary>
        /// 表格行信息转化为实体对象
        /// </summary>
        /// <param name="dr">数据源</param>
        /// <param name="obj">转化实体对象</param>
        private static bool SetData(DataRow dr, object obj) {
            //获取所有属性
            PropertyInfo[] items = obj.GetType().GetProperties();
            bool assignment = false;//判断实体是否进行赋值过
            foreach (PropertyInfo p in items) {
                object[] columns = p.GetCustomAttributes(typeof(DBColumn), true);
                if (columns.Length == 0) continue;
                //字段赋值
                if (Regex.IsMatch(p.PropertyType.ToString(), @"^System\.[a-zA-Z0-9]+")) {
                    //检测字段是否存在
                    DBColumn dbColumn = columns[0] as DBColumn;
                    if (!dr.Table.Columns.Contains(dbColumn.Name)) continue;
                    //赋值
                    switch (p.PropertyType.ToString()) {
                        case "System.Nullable`1[System.Int32]": p.SetValue(obj, dr[dbColumn.Name] == DBNull.Value ? null : (object)Convert.ToInt32(dr[dbColumn.Name]), null); break;
                        case "System.Nullable`1[System.Int64]": p.SetValue(obj, dr[dbColumn.Name] == DBNull.Value ? null : (object)Convert.ToInt64(dr[dbColumn.Name]), null); break;
                        default: p.SetValue(obj, dr[dbColumn.Name] == DBNull.Value ? null : dr[dbColumn.Name], null); break;
                    }
                    if (!assignment) assignment = true;
                    continue;
                }
                //子对象赋值
                object child = System.Activator.CreateInstance(p.PropertyType);
                if (SetData(dr, child)) p.SetValue(obj, child, null);
            }
            return assignment;
        }
    }
后面还有 1 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。