using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> ///TestTableModel 的摘要说明 /// </summary> public class TestTableModel { public int D_Id { get; set; } public string D_Name { get; set; } public string D_Password { get; set; } public string D_Else { get; set; } public decimal D_Amount { get; set; } }
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; using System.Reflection; namespace MSCL { /// <summary> ///ObjectToList 的摘要说明 /// </summary> public static class ObjectToList { /* --示例 IDataReader dr = MSCL.SqlHelper.GetSqlDataReader("select * from TestTable where d_id in(6,7,8)"); List<TestTableModel> t1 = MSCL.ObjectToList.DataReaderToList<TestTableModel>(dr); for (int i = 0; i < t1.Count; i++) { Response.Write(t1[i].D_Id + "<br/>"); Response.Write(t1[i].D_Name + "<br/>"); Response.Write(t1[i].D_Password + "<br/>"); Response.Write(t1[i].D_Else + "<br/>"); Response.Write(t1[i].D_Amount + "<br/>"); } dr.Dispose(); dr.Close(); */ /// <summary> /// DataReader利用泛型填充实体类 /// </summary> /// <typeparam name="T">实体类</typeparam> /// <param name="reader">DataReader</param> /// <returns></returns> public static List<T> DataReaderToList<T>(IDataReader reader) { //实例化一个List<>泛型集合 List<T> DataList = new List<T>(); while (reader.Read()) { T RowInstance = Activator.CreateInstance<T>();//动态创建数据实体对象 //通过反射取得对象所有的Property foreach (PropertyInfo Property in typeof(T).GetProperties()) { try { //取得当前数据库字段的顺序 int Ordinal = reader.GetOrdinal(Property.Name); if (reader.GetValue(Ordinal) != DBNull.Value) { //将DataReader读取出来的数据填充到对象实体的属性里 Property.SetValue(RowInstance, Convert.ChangeType(reader.GetValue(Ordinal), Property.PropertyType), null); } } catch { break; } } DataList.Add(RowInstance); } return DataList; } /// <summary> /// DataTable利用泛型填充实体类 /// </summary> /// <typeparam name="T">实体类</typeparam> /// <param name="dt">DataTable</param> /// <returns></returns> public static List<T> DataTableToList<T>(DataTable dt) where T : new() { var list = new List<T>(); if (dt == null) return list; var len = dt.Rows.Count; for (var i = 0; i < len; i++) { var info = new T(); foreach (DataColumn dc in dt.Rows[i].Table.Columns) { var field = dc.ColumnName; var value = dt.Rows[i][field].ToString(); if (string.IsNullOrEmpty(value)) continue; if (IsDate(value)) { value = DateTime.Parse(value).ToString(); } var p = info.GetType().GetProperty(field); try { if (p.PropertyType == typeof(string)) { p.SetValue(info, value, null); } else if (p.PropertyType == typeof(int)) { p.SetValue(info, int.Parse(value), null); } else if (p.PropertyType == typeof(bool)) { p.SetValue(info, bool.Parse(value), null); } else if (p.PropertyType == typeof(DateTime)) { p.SetValue(info, DateTime.Parse(value), null); } else if (p.PropertyType == typeof(float)) { p.SetValue(info, float.Parse(value), null); } else if (p.PropertyType == typeof(double)) { p.SetValue(info, double.Parse(value), null); } else { p.SetValue(info, value, null); } } catch (Exception) { //p.SetValue(info, ex.Message, null); } } list.Add(info); } dt.Dispose(); dt = null; return list; } /// <summary> /// 是否是时间 /// </summary> /// <param name="d"></param> /// <returns></returns> private static bool IsDate(string d) { DateTime d1; double d2; return !double.TryParse(d, out d2) && DateTime.TryParse(d, out d1); } } }