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 算力,解读结果公开显示在下面。
还没有人解读过这个文件。