您的位置:首页 > 其它

DataTable转换为List<Model>的通用类

2015-04-28 14:59 591 查看
在开发中,把查询结果以DataTable返回很方便,但是在检索数据时又很麻烦,没有模型类型检索方便。 所以很多人都是按照以下方式做的:

// 获得查询结果

DataTable dt = DbHelper.ExecuteDataTable(...);

// 把DataTable转换为IList<UserInfo>

IList<UserInfo> users = ConvertToUserInfo(dt);

问题:如果此系统有几十上百个模型,那不是每个模型中都要写个把DataTable转换为此模型的方法吗?

解决:能不能写个通用类,可以把DataTable转换为任何模型,呵呵,这就需要利用反射和泛型了

不多说,核心代码如下,经过测试,性能不错,大家可以根据实际情况改善

using System;

using System.Collections.Generic;

using System.Text;

using System.Data;

using System.Reflection;

namespace NCL.Data

{

/// <summary>

/// 实体转换辅助类

/// </summary>

public class ModelConvertHelper<T> where T : new()

{

public static IList<T> ConvertToModel(DataTable dt)

{

// 定义集合

IList<T> ts = new List<T>();

// 获得此模型的类型

Type type = typeof(T);

string tempName = "";

foreach (DataRow dr in dt.Rows)

{

T t = new T();

// 获得此模型的公共属性

PropertyInfo[] propertys = t.GetType().GetProperties();

foreach (PropertyInfo pi in propertys)

{

tempName = pi.Name;

// 检查DataTable是否包含此列

if (dt.Columns.Contains(tempName))

{

// 判断此属性是否有Setter

if (!pi.CanWrite) continue;

object value = dr[tempName];

if (value != DBNull.Value)

pi.SetValue(t, value, null);

}

}

ts.Add(t);

}

return ts;

}

}

}

使用方式:

// 获得查询结果

DataTable dt = DbHelper.ExecuteDataTable(...);

// 把DataTable转换为IList<UserInfo>

IList<UserInfo> users = ModelConvertHelper<UserInfo>.ConvertToModel(dt);

原文出自:http://www.cnblogs.com/cj/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: