万能转换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;
}