利用反射把查询到的Table、Reader转换成List、Model
来源:互联网 发布:怎么开发app软件 编辑:程序博客网 时间:2024/06/06 02:40
这是我写的一个工具类,通常我们从数据库查询到一个 DataReader 或者是 一个 Table , 想要转换成 一个 list 或者是 一个model 的话 , 一般情况下是使用foreach 循环reader或是table的rows,然后在循环内创建个对象,通过reader[“列名”]来赋值对象的属性。如果表的字段少的话,用这种方式还可以,速度也快一点。但是如果后续还会增加字段的话,那就非常麻烦了,要改很多地方。这工作量太大了,而且还很容易出错。所以这个时候使用反射来转换的话就非常便捷了。我们只管增加字段,改一下数据表对应的model,调用这个工具类的方法,传入相对应的参数就能得到想要的结果。
public static List<T> ConvertToList<T>(DataTable dt) { List<T> list = new List<T>(); // 定义集合 Type type = typeof(T); // 获得此模型的类型 string tempName = ""; PropertyInfo[] propertys = type.GetProperties();// 获得此模型的公共属性 foreach (DataRow dr in dt.Rows) { //新建一个模型 object obj = type.Assembly.CreateInstance(type.FullName); foreach (PropertyInfo pi in propertys) { tempName = pi.Name; if (dt.Columns.Contains(tempName)) { if (!pi.CanWrite) continue; object value = dr[tempName]; if (value != DBNull.Value) pi.SetValue(obj, value, null); } } list.Add((T)obj); } return list; } public static List<T> ConvertToList<T>(IDataReader reader) { List<T> list = new List<T>(); // 定义集合 Type type = typeof(T); // 获得此模型的类型 string tempName = ""; PropertyInfo[] propertys = type.GetProperties();// 获得此模型的公共属性 while (reader.Read()) { //新建一个模型 object obj = type.Assembly.CreateInstance(type.FullName); foreach (PropertyInfo pi in propertys) { tempName = pi.Name; if (ReaderExists(reader, tempName)) { if (!pi.CanWrite) continue; object value = reader[tempName]; if (value != DBNull.Value) pi.SetValue(obj, value, null); } } list.Add((T)obj); } return list; } public static T ConvertToModel<T>(IDataReader reader) { Type type = typeof(T); PropertyInfo[] proList = type.GetProperties(); //新建一个模型 object obj = type.Assembly.CreateInstance(type.FullName); string tempName = ""; if (reader.Read()) { foreach (PropertyInfo pi in proList) { tempName = pi.Name; if (ReaderExists(reader, pi.Name)) { if (!pi.CanWrite) continue; object value = reader[tempName]; if (value != DBNull.Value) pi.SetValue(obj, value, null); } } } return (T)obj; } public static T ConvertToModel<T>(DataRow row) { Type type = typeof(T); PropertyInfo[] proList = type.GetProperties(); //新建一个模型 object obj = type.Assembly.CreateInstance(type.FullName); string tempName = ""; foreach(PropertyInfo pi in proList) { tempName = pi.Name; if (!string.IsNullOrEmpty(row[tempName].ToString())) { if (!pi.CanWrite) continue; object value = row[tempName]; if (value != DBNull.Value) pi.SetValue(obj, value, null); } } return (T)obj; } /// <summary> /// 验证reader是否存在某列 /// </summary> /// <param name="reader"></param> /// <param name="columnName"></param> /// <returns></returns> private static bool ReaderExists(IDataReader reader,string columnName) { int count = reader.FieldCount; for(int i = 0; i < count; i++) { if(reader.GetName(i).Equals(columnName)) { return true; } } return false; }
0 0
- 利用反射把查询到的Table、Reader转换成List、Model
- reader反射到Model
- 利用java反射把ResultSet转换成List
- 利用反射把让Model与XML互相转换的方法,很通用
- 利用反射把让Model与XML互相转换的方法,很通用
- 利用反射把DataTable自动赋值到Model实体(自动识别数据类型)
- 把DataReader转换成model
- 利用反射将Datatable、SqlDataReader转换成List模型
- DataTable转换成List<Model>
- 利用Reflection反射将对象转化为 List和Model
- .NET把DataTable转换为List〈Model〉的形式
- 利用Java反射实现普通对象到JSONObject的转换
- 根据反射将数据库查询结果Datatable,转换为对应的Model类实体对象
- java反射机制解决数据库查询结果到Model类
- 利用java反射技术把ResultSet装换为List
- 把从数据库中查询出的一个字段封装到一个List中,返回List
- JDBC通过反射机制批量的把List里面的对象添加到数据库中
- 把list转换成 datatable
- android自定义popwindow,并且有从底部弹出的动画
- DB操作类
- stl读书笔记(1)-内存分配
- Swift-创建单例的三种方式
- WebView中使用setBuiltInZoomControls进行缩放并destroy webview时崩溃
- 利用反射把查询到的Table、Reader转换成List、Model
- 微信开发
- android studio 2.2 使用NDK方法
- spring2.5升级至spring4.1.6
- Linux shell数学运算
- PHP内核的存储机制(分离/改变)
- java 后台文件下载
- Linux杂七杂八
- tomcat和nginx的上传文件失败的解决方法