C# DataTable与Model互转的示例代码

/// <summary>
 /// 实体转换辅助类
 /// </summary>
 public class ModelConvertHelper<T> where T : new()
 {
  /// <summary>
  /// List泛型转换DataTable.
  /// </summary>
  public DataTable ListToDataTable<T>(List<T> items)
  {
   var tb = new DataTable(typeof(T).Name);
 
   PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
 
   foreach (PropertyInfo prop in props)
   {
    Type t = GetCoreType(prop.PropertyType);
    tb.Columns.Add(prop.Name, t);
   }
 
   foreach (T item in items)
   {
    var values = new object[props.Length];
 
    for (int i = 0; i < props.Length; i++)
    {
     values[i] = props[i].GetValue(item, null);
    }
 
    tb.Rows.Add(values);
   }
 
   return tb;
  }
 
  /// <summary>
  /// model转换DataTable
  /// </summary>
  /// <typeparam name="T"></typeparam>
  /// <param name="items"></param>
  /// <returns></returns>
  public DataTable ModelToDataTable<T>(T items)
  {
   var tb = new DataTable(typeof(T).Name);
 
   PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
 
   foreach (PropertyInfo prop in props)
   {
    Type t = GetCoreType(prop.PropertyType);
    tb.Columns.Add(prop.Name, t);
   }
 
 
   var values = new object[props.Length];
 
   for (int i = 0; i < props.Length; i++)
   {
    values[i] = props[i].GetValue(items, null);
   }
 
   tb.Rows.Add(values);
 
 
   return tb;
  }
 
  /// <summary>
  /// Determine of specified type is nullable
  /// </summary>
  public static bool IsNullable(Type t)
  {
   return !t.IsValueType || (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>));
  }
 
  /// <summary>
  /// Return underlying type if type is Nullable otherwise return the type
  /// </summary>
  public static Type GetCoreType(Type t)
  {
   if (t != null && IsNullable(t))
   {
    if (!t.IsValueType)
    {
     return t;
    }
    else
    {
     return Nullable.GetUnderlyingType(t);
    }
   }
   else
   {
    return t;
   }
  }
 
  /// <summary>
  /// DataTable转换泛型List
  /// </summary>
  /// <param name="dt"></param>
  /// <returns></returns>
  public static List<T> DataTableToList(DataTable dt)
  {
   // 定义集合
   List<T> ts = new List<T>();
 
   // 获得此模型的类型
   Type type = typeof(T);
   string tempName = "";
   foreach (DataRow dr in dt.Rows)
   {
    T t = new T();
    // 获得此模型的公共属性
    PropertyInfo[] propertys = t.GetType().GetProperties();
    foreach (PropertyInfo pi in propertys)
    {
     tempName = pi.Name; // 检查DataTable是否包含此列
 
     if (dt.Columns.Contains(tempName))
     {
      // 判断此属性是否有Setter
      if (!pi.CanWrite) continue;
 
      object value = dr[tempName];
      if (value != DBNull.Value)
       pi.SetValue(t, value, null);
     }
    }
    ts.Add(t);
   }
   return ts;
  }
 
 
  public static T DataTableToModel(DataTable dt)
  {
   // 定义实体
   T t = new T();
 
   // 获得此模型的类型
   Type type = typeof(T);
   string tempName = "";
 
   foreach (DataRow dr in dt.Rows)
   {
 
    // 获得此模型的公共属性
    PropertyInfo[] propertys = t.GetType().GetProperties();
    foreach (PropertyInfo pi in propertys)
    {
     tempName = pi.Name; // 检查DataTable是否包含此列
 
     if (dt.Columns.Contains(tempName))
     {
      // 判断此属性是否有Setter
      if (!pi.CanWrite) continue;
 
      object value = dr[tempName];
      if (value != DBNull.Value)
       pi.SetValue(t, value, null);
     }
    }
    break;
   }
   return t;
  }
 }

以上就是C#DataTable与Model互转c#教程的示例代码的详细内容,更多关于C#DataTable与Model互转的资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值