zoukankan      html  css  js  c++  java
  • DataTable、实体类Model和泛型List之间的转化

    1.网上例子

    http://www.2cto.com/kf/201204/127785.html

    Serialize() 和getSendDetailTest()

    2.研发中例子

    dt转化成model

    dt转化model Code
     1  public static object GetModel(DataTable dt, object model)
     2         {
     3 
     4             foreach (DataRow row in dt.Rows)
     5             {
     6                 foreach (var item in model.GetType().GetProperties())
     7                 {
     8                     if (row.Table.Columns.Contains(item.Name))
     9                     {
    10                         if (DBNull.Value != row[item.Name])
    11                         {
    12                             item.SetValue(model, Convert.ChangeType(row[item.Name], item.PropertyType), null);
    13                         }
    14 
    15                     }
    16                 }
    17             }
    18             return model;
    19         }

    model 经过list 转化成dt

    View Code
    List<Sys_grade> list = new List<Sys_grade>();
                            list.Add(grade);
                            DataTable dtgrade = new DataTable();
                            dtgrade = KeyValueHelper.ListToDataTable(list);
                            daclient.SysGradeAdd(dtgrade);

    ListToDataTable()方法:

    View Code
     1   public static DataTable ListToDataTable<T>(List<T> entitys)
     2         {
     3 
     4             //检查实体集合不能为空
     5             if (entitys == null || entitys.Count < 1)
     6             {
     7                 return new DataTable();
     8             }
     9 
    10             //取出第一个实体的所有Propertie
    11             Type entityType = entitys[0].GetType();
    12             PropertyInfo[] entityProperties = entityType.GetProperties();
    13 
    14             //生成DataTable的structure
    15             //生产代码中,应将生成的DataTable结构Cache起来,此处略
    16             DataTable dt = new DataTable("dt");
    17             for (int i = 0; i < entityProperties.Length; i++)
    18             {
    19                 //dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType);
    20                 dt.Columns.Add(entityProperties[i].Name);
    21             }
    22 
    23             //将所有entity添加到DataTable中
    24             foreach (object entity in entitys)
    25             {
    26                 //检查所有的的实体都为同一类型
    27                 if (entity.GetType() != entityType)
    28                 {
    29                     throw new Exception("要转换的集合元素类型不一致");
    30                 }
    31                 object[] entityValues = new object[entityProperties.Length];
    32                 for (int i = 0; i < entityProperties.Length; i++)
    33                 {
    34                     entityValues[i] = entityProperties[i].GetValue(entity, null);
    35 
    36                 }
    37                 dt.Rows.Add(entityValues);
    38             }
    39             return dt;
    40         }

    备注:List<>:表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法。

    最后:感谢网友提供资料。

  • 相关阅读:
    asp.net 数据导出到Excel
    系统架构之畅想
    access2003绿色中文版(转)
    项目那点事(共享)
    不错的消息提示
    配置Windows media service 流媒体服务器
    MemberShip 数据库的安装,web.config的配置及数据库文档结构
    windows server 2003 service pack 2 无法安装...产品密钥可能无效
    残忍,人
    js小技巧鼠标滑过显示大图
  • 原文地址:https://www.cnblogs.com/lei2007/p/2960278.html
Copyright © 2011-2022 走看看