分享一个获取List<model>的dbHelper类部分代码。
时间:2011-12-14
来源:互联网
public static class GetGenericObject<T, K> where T : new() where K : IDataReader { /// <summary> /// 返回对象 /// </summary> /// <param name="dataReader"></param> /// <returns></returns> public static T GetObject(K dataReader) { T newInstance = Activator.CreateInstance<T>(); if (dataReader.Read()) { SetModelValue(dataReader, newInstance); } dataReader.Close(); return newInstance; } /// <summary> /// 返回列表。 /// </summary> /// <param name="dataReader"></param> /// <returns></returns> public static IList<T> GetObjectList(K dataReader) { IList<T> objectLists = new List<T>(); while (dataReader.Read()) { T newInstance = Activator.CreateInstance<T>(); SetModelValue(dataReader, newInstance); objectLists.Add(newInstance); } dataReader.Close(); return objectLists; } private static void SetModelValue(K dataReader, T newInstance) { Type type = newInstance.GetType(); PropertyInfo[] properties = type.GetProperties(); foreach (PropertyInfo pi in properties) { if (CheckDataReader(dataReader, pi.Name)) pi.SetValue(newInstance, dataReader[pi.Name], null); } } private static bool CheckDataReader(K dataReader, string fieldName) { int fields = dataReader.FieldCount; bool state = false; for (int i = 0; i < fields; i++) { if (dataReader.GetName(i) == fieldName) if (dataReader[i] != null && dataReader[i] != DBNull.Value) state = true; } return state; } }
作者: a410787073 发布时间: 2011-12-14
作者: a410787073 发布时间: 2011-12-14
该回复于2011-12-14 09:09:37被管理员删除
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
|
#3楼 得分:0回复于:2011-12-14 09:17:21
|
作者: zy64891635 发布时间: 2011-12-14

作者: yuan521929 发布时间: 2011-12-14
该回复于2011-12-14 09:34:08被管理员删除
- 对我有用[0]
- 丢个板砖[0]
- 引用
- 举报
- 管理
- TOP
|
#6楼 得分:0回复于:2011-12-14 09:29:36
|
作者: q107770540 发布时间: 2011-12-14
作者: zy64891635 发布时间: 2011-12-14
T newInstance = Activator.CreateInstance<T>();
这句有必要?
你都有new()的约束了,还反射创建?
直接T newInstance = new T();
不就行了
作者: NqIceCoffee 发布时间: 2011-12-14
作者: orain 发布时间: 2011-12-14
T newInstance = Activator.CreateInstance<T>();
这句有必要?
你都有new()的约束了,还反射创建?
直接T newInstance = new T();
不就行了
本质上是一样的
PropertyInfo[] properties = type.GetProperties();这个其实可以作为类的一个字段来用
放在SetModelValue里面,如果纪录比较多,每行都得反射一次,会影响性能
作者: dongt1 发布时间: 2011-12-14
作者: courdom 发布时间: 2011-12-14
PropertyInfo[] properties = type.GetProperties(); while (dataReader.Read()) { ..... }
在外反射一次就好了
作者: dongxinxi 发布时间: 2011-12-14
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28