软件编程
位置:首页>> 软件编程>> C#编程>> C#中泛型举例List<T>与DataTable相互转换

C#中泛型举例List<T>与DataTable相互转换

作者:springsnow  发布时间:2021-07-06 18:54:08 

标签:C#,泛型,List,DataTable,相互,转换

一、 DataTable转换到List<T>

/// <summary>  
/// TableToList  
/// </summary>
public class TableListConverter<T> where T : class, new()
{
   public static IList<T> TableToList(DataTable dt)
   {

IList<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;
               if (dt.Columns.Contains(tempName))// 检查DataTable是否包含此列
               {
                   if (!pi.CanWrite) continue;// 判断此属性是否有Setter

object value = dr[tempName];
                   if (value != DBNull.Value)
                       pi.SetValue(t, value, null);
               }
           }
           ts.Add(t);
       }

return ts;

}
}

应用:

// 获得查询结果
DataTable dt = DbHelper.ExecuteDataTable("...");
// 把DataTable转换为IList<UserInfo>
IList<UserInfo> users = TableListConverter<UserInfo>.TableToList(dt);

二、 List<T>转换到DataTable

/// <summary>  
/// ListToTable  
/// </summary>  
public class TableListConverter
{
   public static DataTable ListToTable<T>(IList<T> list) where T : class, new()
   {
       if (list == null) return null;
       Type type = typeof(T);
       DataTable dt = new DataTable();

PropertyInfo[] properties = Array.FindAll(type.GetProperties(), p => p.CanRead);//判断此属性是否有Getter
       Array.ForEach(properties, prop => { dt.Columns.Add(prop.Name, prop.PropertyType); });//添加到列
       foreach (T t in list)
       {
           DataRow row = dt.NewRow();
           Array.ForEach(properties, prop =>
           {
               row[prop.Name] = prop.GetValue(t, null);
           });//添加到行
           dt.Rows.Add(row);
       }
       return dt;
   }
}

应用:

//IList<UserInfo> users
DataTable dt =TableListConverter.ListToTable(users)

C#中泛型举例List<T>与DataTable相互转换

C#中泛型举例List<T>与DataTable相互转换

来源:https://www.cnblogs.com/springsnow/p/9428673.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com