扩展方法 针对DataTable操作
来源:互联网 发布:淘宝招商条件 编辑:程序博客网 时间:2024/06/03 22:41
扩展方法类,必须是静态的类,以及静态方法。
如果又有 tableName1这样一张表,同样也有一个对象的 tableName1类模型
public static class ExMethod{ /// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dt"></param> /// <param name="split"></param> /// <returns></returns> public static List<T> GetModelItem<T>(this DataTable @dt, string split) where T : new() { List<T> item = new List<T>(); foreach (DataRow dr in dt.Rows) { T tt = dr.GetModel<T>(dt.Columns, "_"); if (null == tt || tt.Equals(default(T))) { continue; } item.Add(tt); } return item; } /// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dt"></param> /// <param name="split"></param> /// <returns></returns> public static List<T> GetModelItem<T>(this DataTable @dt) where T : new() { return GetModelItem<T>(@dt, null); } /// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dr"></param> /// <param name="dcc"></param> /// <param name="split"></param> /// <returns></returns> public static T GetModel<T>(this DataRow @dr, DataColumnCollection dcc, string split) where T : new() { T _newT = new T(); Type tt = _newT.GetType(); foreach (DataColumn dc in dcc) { object value = dr[dc]; PropertyInfo pi = tt.GetProperty(split.IsNullOrEmpty() ? dc.ColumnName : dc.ColumnName.Replace(split, ""), BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); if (null == pi) { continue; } if (pi.PropertyType.IsEnum) { pi.SetValue(_newT, Enum.Parse(pi.PropertyType, string.Format("{0}", value)), null); } else { pi.SetValue(_newT, Convert.ChangeType(value, pi.PropertyType, null), null); } } return _newT; } /// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dt"></param> /// <param name="split"></param> /// <returns></returns> public static T GetModel<T>(this DataTable @dt, string split) where T : new() { if (null == @dt) { return default(T); } return GetModel<T>(dt.Rows[0], dt.Columns, split); } /// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dt"></param> /// <returns></returns> public static T GetModel<T>(this DataTable @dt) where T : new() { if (null == @dt || 0 == @dt.Rows.Count) { return default(T); } return GetModel<T>(dt.Rows[0], dt.Columns, null); }}
用个简单的例子来说明一下上面的方法吧。
在数据表中有一张【tableName】表,表的字段有四字分别是 field1、field2、field3、field4。
同时创建一个table的模型类如下所示:
public class tableName{ public string field1{get;set;} public string field2{get;set;} public string field3{get;set;} public string field4{get;set;}}表的结构和类的结构一样
现在要获取一个tableName表里所有数据
一般正常情况如下:
string sqlQuery = string.Format("[0}",select * from tableName);DataTable dt = DatabaseHelper.GetDataTable(sqlQuery);List<tableName> item = new List<tableName();//-->最好判断一下dt是否为空foreach(DataRow dr in dt.Rows){ tableName tn = new tableName(); tn.field1 = string.Format("{0}",dr["field1"]); tn.field2 = string.Format("{0}",dr["field2"]); tn.field3 = string.Format("{0}",dr["field3"]); tn.field4 = string.Format("{0}",dr["field4"]); item.Add(tn);}//现在将返回的数据,转换成对象了数据了。
如果又有 tableName1这样一张表,同样也有一个对象的 tableName1类模型
同样要获取 tableName里的数据转成 List<tableName1> 集合
又得写 一遍
foreach(DataRow dr in dt.Rows){
....
}
现在写一个通用的方法
只要传入一个对象模型就可以,返回 对象模型数据集合。
public static List<T> GetModelItem<T>(DataTable dt){ //-->代码处理}
将上面那段代码放到扩展方法里如下所示:
sqlQuery = string.Format("{0}","select * from tableName");List<tableName> item = DatabaseHelper.GetDataTable(sqlQuery).GetModeItem<tableName>();sqlQuery = string.Format("{0}","select * from tableNam1");List<tableName1> item = DatabaseHelper.GetDataTable(sqlQuery).GetModelItem<tableName1>();
这样就不用想要表数据的时候,都要去写一个foreach来对对象模型进行赋值了
这样的话通过扩展方法就挺了,用起来也方便许多。
- 扩展方法 针对DataTable操作
- 使用扩展方法将datatable化成list,list转成datatable
- 扩展方法 DataTable To List<T>
- 扩展方法 DataTable To List<T>
- 扩展操作吗方法
- ASP.NET操作DataTable各种方法总结
- ASP.NET操作DataTable各种方法总结(给Datatable添加行列、DataTable选择排序等)
- ASP.NET操作DataTable各种方法总结(给Datatable添加行列、DataTable选择排序等)
- ASP.NET操作DataTable各种方法总结(给Datatable添加行列、DataTable选择排序等)
- vs2005针对datatable已经有封装好的去重复方法:
- 对数组操作扩展方法
- DataTable操作
- 操作DataTable
- DataTable 操作
- DataTable操作
- 操作datatable
- 操作DataTable
- 操作DataTable
- 迫不及待
- AllWinnerTech A10添加驱动ko模块方法
- C/C++中,2个getline函数使用
- 解决 myEclipse 不编辑的方法
- Minifilter中 Filter Initiated I/O(过滤器自产生I/O)
- 扩展方法 针对DataTable操作
- android adb push 与 adb install的比较(两种安装APK的方法)
- 在JavaScript中获取请求的URL参数
- Google Maps + Flex Mobile
- QT 4.7.0 使用odbc链接sqlserver 测试成功
- Serv-U搭建FTP服务器——简单应用
- amfphp2.0配置
- HALCON算子函数——Chapter 1 : Classification
- java编程,计算相隔天数