你的位置:首页 > ASP.net教程

[ASP.net教程]DataSet集合直接根据传入的类转ListT集合


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

一般我们使用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       else28       {29         return "";30       }31     }

View Code