DataTable转换成IList<T>的简单实现
2015-06-30 22:02 杭伟 阅读(1268) 评论(0) 编辑 收藏 举报DataTable的无奈
很多时候,我们需要去操作DataTable。但DataTable的操作,实在是太不方便了。Linq?lambda表达式?统统没有...
特别是对现有结果集做进一步筛选,这样的高频率动作,DataTable却无能为力。
网上很多朋友说用反射实现。那么问题来了,一定要用反射吗?
下面我们用一个不用反射的方式实现:
TableToList类
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; /// <summary> /// DataTable转换成IList /// </summary> /// <typeparam name="T"></typeparam> public class TableToList<T> where T : class, new() { public static IList<T> ToList(DataTable dt, Func<DataRow, T> func) { if (dt == null || dt.Rows.Count == 0) { return null; } IList<T> list = new List<T>(dt.Rows.Count); foreach (DataRow dr in dt.Rows) { list.Add(func(dr)); } return list; } }
调用
DataTable dtCheck = SQLHelper.ExecDataTable2(string.Format("select * from PortCheckProj WHERE SAPCode='{0}'", list.First().DefID)); IList<CheckModel> list_check = TableToList<CheckModel>.ToList(dtCheck, DataRowToCheckModel);
其中,DataRowToCheckModel方法
private CheckModel DataRowToCheckModel(DataRow dr) { CheckModel item = new CheckModel(); item.SAPCode = Convert.ToString(dr["SAPCode"]); item.CheckProj = Convert.ToString(dr["CheckProj"]); item.Uom = Convert.ToString(dr["Uom"]); item.TargetNum = Convert.ToDouble(dr["TargetNum"]); item.Operate = Convert.ToString(dr["Operate"]); return item; }
CheckModel是一个实体类,实际要求一般与DataTable栏位对应。
ok。转换完成。
小结
本篇文章主要讲述DataTable转换成泛型集合的一个简单实例,并给出核心代码。
您还有更简便的方法吗?欢迎留言交流~
作者:hangwei
出处:http://www.cnblogs.com/hangwei/
关于作者:专注于开源平台,分布式系统的架构设计与开发、数据库性能调优等工作。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
如果您觉得文章对您有帮助,可以点击文章右下角“推荐”一下。您的鼓励是作者坚持原创和持续写作的最大动力!