万能转换List

public static List<T> DataReaderToModel<T>(IDataReader dr) where T : new()
     {
      
         List<T> list = new List<T>();
         if (dr == null) return list;
         using (dr)
         {
             while (dr.Read())
             {
                 // 获得此模型的公共属性
                 T t = new T();
                 PropertyInfo[] propertys = t.GetType().GetProperties();
                 List<string> listFieldName = new List<string>(dr.FieldCount);
                 for (int i = 0; i < dr.FieldCount; i++)
                 {
                     listFieldName.Add(dr.GetName(i).ToLower());
                 }

                 foreach (PropertyInfo pi in propertys)
                 {
                     string columnName = pi.Name;
                     if (listFieldName.Contains(columnName.ToLower()))
                     {
                         // 判断此属性是否有Setter或columnName值是否为空
                         object value = dr[columnName];
                         if (!pi.CanWrite || value is DBNull || value == DBNull.Value) continue;
                         try
                         {
                             #region SetValue
                             switch (pi.PropertyType.ToString())
                             {
                                 case "System.String": pi.SetValue(t, Convert.ToString(value), null); break;
                                 case "System.Int32": pi.SetValue(t, Convert.ToInt32(value), null); break;
                                 case "System.DateTime": pi.SetValue(t, Convert.ToDateTime(value), null); break;
                                 case "System.Boolean": pi.SetValue(t, Convert.ToBoolean(value), null); break;
                                 case "System.Double": pi.SetValue(t, Convert.ToDouble(value), null); break;
                                 case "System.Decimal": pi.SetValue(t, Convert.ToDecimal(value), null); break;
                                 default: pi.SetValue(t, value, null); break;
                             }
                             #endregion
                         }
                         catch
                         {

                         }
                     }
                 }//end foreach
                 list.Add(t);
             }//end while
         }//end using
         return list;
     }


例子:  public static List<BBSArticleEntity> DataReaderToModel<BBSArticleEntity>(IDataReader dr) where BBSArticleEntity : new()
        {

            List<BBSArticleEntity> list = new List<BBSArticleEntity>();
            if (dr == null) return list;
            using (dr)
            {
                while (dr.Read())
                {
                    // 获得此模型的公共属性
                    BBSArticleEntity t = new BBSArticleEntity();
                    PropertyInfo[] propertys = t.GetType().GetProperties();
                    List<string> listFieldName = new List<string>(dr.FieldCount);
                    for (int i = 0; i < dr.FieldCount; i++)
                    {
                        listFieldName.Add(dr.GetName(i).ToLower());
                    }

                    foreach (PropertyInfo pi in propertys)
                    {
                        string columnName = pi.Name;
                        if (listFieldName.Contains(columnName.ToLower()))
                        {
                            // 判断此属性是否有Setter或columnName值是否为空
                            object value = dr[columnName];
                            if (!pi.CanWrite || value is DBNull || value == DBNull.Value) continue;
                            try
                            {
                                #region SetValue
                                switch (pi.PropertyType.ToString())
                                {
                                    case "System.String": pi.SetValue(t, Convert.ToString(value), null); break;
                                    case "System.Int32": pi.SetValue(t, Convert.ToInt32(value), null); break;
                                    case "System.DateTime": pi.SetValue(t, Convert.ToDateTime(value), null); break;
                                    case "System.Boolean": pi.SetValue(t, Convert.ToBoolean(value), null); break;
                                    case "System.Double": pi.SetValue(t, Convert.ToDouble(value), null); break;
                                    case "System.Decimal": pi.SetValue(t, Convert.ToDecimal(value), null); break;
                                    default: pi.SetValue(t, value, null); break;
                                }
                                #endregion
                            }
                            catch
                            {

                            }
                        }
                    }//end foreach
                    list.Add(t);
                }//end while
            }//end using
            return list;
        }


 public List<BBSArticleEntity> UserPostNumber()
        {
            string sql = "select u.user_id,u.login_name,count(*) as num from bbs_article a join adm_user u on a.user_id=u.user_id where (sysdate-a.bbs_article_date)<=7 and rownum<=10  group by u.user_id,u.login_name  order by count(*) desc";
            DbCommand cmd = db.GetSqlStringCommand(sql);
            DataSet ds = db.ExecuteDataSet(cmd);
            List<BBSArticleEntity> list = new List<BBSArticleEntity>();
            using (IDataReader reader = db.ExecuteReader(cmd))
            {
                list = DataReaderToModel<BBSArticleEntity>(reader);
            }
            return list;

        }
       

posted on 2013-02-19 15:22  闪电光芒  阅读(126)  评论(0编辑  收藏  举报

导航