zoukankan      html  css  js  c++  java
  • DataSet集合直接根据传入的类转List<T>集合

    最近比较忙,好久没写博客了。个人感觉最好的进步就是写东西。哈哈。

    一般我们使用ADO.net从数据库中读取数据返回的集合是DataSet类型的。有时候我们需要进行转换成List<T>集合。一般的做法是在DAL层中,写个方法进行转换。(每个表写一个)。累哦!~

    所以我就想,能不能写个工厂,传入DataSet 集合 和 需要转化的类的类型。就自动转化了。就有了下面的代码了。

     1         /// <summary>
     2         ///  Dataset 集合根据传入的 类型。自动转换List集合"
     3         /// </summary>
     4         /// <typeparam name="T">类(属性类 modle)</typeparam>
     5         /// <param name="ds">数据集合</param>
     6         /// <returns>List集合</returns>
     7         public List<T> GetListbyDataSet<T>(DataSet ds) where T: new()
     8         {
     9             List<T> li = new List<T>(); //声明要返回的集合
    10             var s = typeof(T);          // 获取传入类型
    11             var str = s.GetProperties(); // 获取传入类型的属性集合
    12             if (ds.Tables[0] == null || ds.Tables[0].Rows.Count < 0) //判断ds的null和是否包含数据
    13             {
    14                 return li;
    15             }
    16             for (int i = 0; i < ds.Tables[0].Rows.Count; i++) //循环集合准备获取数据
    17             {
    18                 T t1 = new T();       // 声明类
    19                 foreach (var item in str)  // 循环类的属性
    20                 {
    21                     string itemstr = item.Name; //类属性名称
    22                     var itemtype = item.PropertyType; // 类属性的类型(int string datetime)
    23                     object value = GetvalbyDataSet(itemstr, itemtype, ds.Tables[0].Rows[i]); //获取值
    24                     item.SetValue(t1, value, null);
    25                     
    26                 }
    27                 li.Add(t1);
    28             }
    29              return li;
    30         }
    View Code
     1  /// <summary>
     2         ///  在DataRow中 获取 对应列的值
     3         /// </summary>
     4         /// <param name="colname">列名称</param>
     5         /// <param name="colname">列的类型</param>
     6         /// <param name="dr">DataRow 集合</param>
     7         /// <returns>列值</returns>
     8         private object GetvalbyDataSet(string colname,Type coltype, DataRow dr)
     9         {
    10             if (dr.Table.Columns.Contains(colname))
    11             {
    12                 if (typeof(int) == coltype)
    13                 {
    14                     return dr[colname] == null ? 0 : int.Parse(dr[colname].ToString());
    15                 }
    16                 if (typeof(DateTime) == coltype)
    17                 {
    18                     return dr[colname] == null ? DateTime.Parse("2016/9/22") : DateTime.Parse(dr[colname].ToString());
    19                 }
    20                 if (typeof(decimal) == coltype)
    21                 {
    22                     return dr[colname] == null ? decimal.Parse("0") : decimal.Parse(dr[colname].ToString());
    23                 }
    24                 string str = dr[colname] == null ? "" :  dr[colname].ToString();
    25                 return str;
    26             }
    27             else
    28             {
    29                 return "";
    30             }
    31         }
    View Code
  • 相关阅读:
    c#自动更新+安装程序的制作
    VS2013项目受源代码管理向源代码管理注册此项目时出错
    WinDbg配置和使用基础
    InstallShield Limited Edition for Visual Studio 2013 图文教程(教你如何打包.NET程序)
    PowerDesigner 如何生成数据库更新脚本
    用户故事(User Story)
    Troubleshooting Record and Playback issues in Coded UI Test
    Coded UI
    compare two oracle database schemas
    How to: Use Schema Compare to Compare Different Database Definitions
  • 原文地址:https://www.cnblogs.com/duchyaiai/p/5897161.html
Copyright © 2011-2022 走看看