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 实战练习题目20 – 小球自由下落
    C 实战练习题目19
    C 实战练习题目18
    C 实战练习题目17
    C 实战练习题目16 -最大公约数和最小公倍数
    C 实战练习题目15
    C 实战练习题目14 -将一个正整数分解质因数
    C 实战练习题目13 -水仙花数
    C 实战练习题目12
    C 实战练习题目11
  • 原文地址:https://www.cnblogs.com/duchyaiai/p/5897161.html
Copyright © 2011-2022 走看看