list装换datatable,datatable装换list

本文提供了一段代码示例,展示如何将泛类型集合转换为DataTable,并从DataTable反向转换回集合。重点在于确保类型一致性与避免空集错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 /// <summary>
    
/// 将泛类型集合List类转换成DataTable
    
/// </summary>
    
/// <param name="list">泛类型集合</param>
    
/// <returns></returns>
    public static DataTable ListToDataTable<T>(List<T> entitys)
    {
        
//检查实体集合不能为空
        if (entitys == null || entitys.Count < 1)
        {
            
throw new Exception("需转换的集合为空");
        }
        
//取出第一个实体的所有Propertie
        Type entityType = entitys[0].GetType();
        PropertyInfo[] entityProperties 
= entityType.GetProperties();

        
//生成DataTable的structure
        
//生产代码中,应将生成的DataTable结构Cache起来,此处略
        DataTable dt = new DataTable();
        
for (int i = 0; i < entityProperties.Length; i++)
        {
            
//dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType);
            dt.Columns.Add(entityProperties[i].Name);
        }
        
//将所有entity添加到DataTable中
        foreach (object entity in entitys)
        {
            
//检查所有的的实体都为同一类型
            if (entity.GetType() != entityType)
            {
                
throw new Exception("要转换的集合元素类型不一致");
            }
            
object[] entityValues = new object[entityProperties.Length];
            
for (int i = 0; i < entityProperties.Length; i++)
            {
                entityValues[i] 
= entityProperties[i].GetValue(entity, null);
            }
            dt.Rows.Add(entityValues);
        }
        
return dt;

    }

   //table装换list

public static IList<T> ConvertToModel(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;
 
  // 检查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;
 
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值