苏飞论坛
标题:
自己写的反射帮助类.自动将数据库结果集反射成泛型集合
[打印本页]
作者:
qq576733600
时间:
2013-6-25 16:33
标题:
自己写的反射帮助类.自动将数据库结果集反射成泛型集合
由于每次数据库操作 返回的 数据库结果集 如:DataSet、DataTableReader、SqlDataReader 都有非常繁琐的 取值操作
例如:
[code=csharp]while (this.dr.Read())
{
string Name = this.dr["Name"].ToString();//医院名称
string Address = this.dr["Address"].ToString();//地址
string Features = this.dr["Features"].ToString();//特色项目
string Details = this.dr["Details"].ToString();//医院描述
string Favorable = this.dr["Favorable"].ToString();//折扣
string SmallImg = this.dr["SmallImg"].ToString();//医院小图片
}[/code]
所以写了一个反射帮助类,来解决这些繁琐的取值操做 (ps:结果有对象的实体对象)
部分代码如下:
[code=csharp]#region ************* 反射:将DataSet反射成泛型集合 *************
/// <summary>
/// 将DataSet反射成泛型集合
/// </summary>
/// <typeparam name="T">实体对象</typeparam>
/// <param name="ds">DataSet</param>
/// <returns></returns>
public List<T> getModelArrary<T>(DataSet ds) where T : new()
{
if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
{
return null;
}
T t = new T();
List<T> list = new List<T>();
PropertyInfo[] properties = t.GetType().GetProperties();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
T model = new T();
foreach (var propertyInfo in properties)
{
string name = propertyInfo.Name;
if (ds.Tables[0].Rows[name] != null && ds.Tables[0].Rows[name].ToString() != "")
{
string value = ds.Tables[0].Rows[name].ToString();
SetModelValue(name, value, model);
}
}
list.Add(model);
}
ds.Dispose();
return list;
}
#endregion ************* 反射:将DataSet反射成泛型集合 *************
#region ************* 反射:将SqlDataReader反射成泛型集合 *************
/// <summary>
/// 将SqlDataReader反射成泛型集合
/// </summary>
/// <typeparam name="T">实体对象</typeparam>
/// <param name="ds">SqlDataReader</param>
/// <returns></returns>
public List<T> getModelArrary<T>(SqlDataReader dr) where T : new()
{
if (dr == null || dr.HasRows == false)
{
return null;
}
T t = new T();
List<T> list = new List<T>();
PropertyInfo[] properties = t.GetType().GetProperties();
while (dr.Read())
{
T model = new T();
foreach (var propertyInfo in properties)
{
string name = propertyInfo.Name;
if (dr[name] != null && dr[name].ToString() != "")
{
string value = dr[name].ToString();
SetModelValue(name, value, model);
}
}
list.Add(model);
}
dr.Dispose();
return list;
}
#endregion ************* 反射:将SqlDataReader反射成泛型集合 *************
#region ************* 反射:将DataTableReader反射成泛型集合 *************
/// <summary>
/// 将DataTableReader反射成泛型集合
/// </summary>
/// <typeparam name="T">实体对象</typeparam>
/// <param name="ds">DataTableReader</param>
/// <returns></returns>
public List<T> getModelArrary<T>(DataTableReader dtr) where T : new()
{
if (dtr == null || dtr.HasRows == false)
{
return null;
}
T t = new T();
List<T> list = new List<T>();
PropertyInfo[] properties = t.GetType().GetProperties();
while (dtr.Read())
{
T model = new T();
foreach (var propertyInfo in properties)
{
string name = propertyInfo.Name;
if (dtr[name] != null && dtr[name].ToString() != "")
{
string value = dtr[name].ToString();
SetModelValue(name, value, model);
}
}
list.Add(model);
}
dtr.Dispose();
return list;
}
#endregion ************* 反射:将DataTableReader反射成泛型集合 *************[/code]
全部源码在附件中
作者:
站长苏飞
时间:
2013-6-25 16:39
我帮你用上了代码控件,建议以后也用用好看一些
http://www.sufeinet.com/thread-1942-1-1.html
作者:
紫枫闲人
时间:
2013-6-25 19:28
受教了,学习中……
欢迎光临 苏飞论坛 (http://www.sufeinet.com/)
Powered by Discuz! X3.4