咨询区

  • Anthony

我在使用第三方工具包,它返回了一个 DataReader,为了能更方便的使用,我希望有一种快捷方法能够将它转成 List<T>,除了一行一行的迭代赋值之外还有其他好的方式吗?

回答区

  • pim

可以用反射实现,虽然性能低一点,但它可以帮你自动化的将 DataReader 映射到 List<T> 上,这里的 T 可以是你的任意类型,参考如下代码:

public static class DataRecordHelper
{public static void CreateRecord<T>(IDataRecord record, T myClass){PropertyInfo[] propertyInfos = typeof(T).GetProperties();for (int i = 0; i < record.FieldCount; i++){foreach (PropertyInfo propertyInfo in propertyInfos){if (propertyInfo.Name == record.GetName(i)){propertyInfo.SetValue(myClass, Convert.ChangeType(record.GetValue(i), record.GetFieldType(i)), null);break;}}}}
}public class Employee
{public int Id { get; set; }public string LastName { get; set; }public DateTime? BirthDate { get; set; }public static IDataReader GetEmployeesReader(){SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);conn.Open();using (SqlCommand cmd = new SqlCommand("SELECT EmployeeID As Id, LastName, BirthDate FROM Employees")){cmd.Connection = conn;return cmd.ExecuteReader(CommandBehavior.CloseConnection);}}public static IEnumerable GetEmployees(){IDataReader rdr = GetEmployeesReader();while (rdr.Read()){Employee emp = new Employee();DataRecordHelper.CreateRecord<Employee>(rdr, emp);yield return emp;}}
}
  • Phil Cooper

对于你的需求,建议使用 Dapper 做这种映射,参考如下代码:

public List<CustomerEntity> GetCustomerList()
{using (DbConnection connection = CreateConnection()){return connection.Query<CustomerEntity>("procToReturnCustomers", commandType: CommandType.StoredProcedure).ToList();}
}

CreateConnection() 它用来创建数据库连接,然后 Dapper 内部会通过 ILEmit 的方式实现 DataReader 和 Properties 之间的自动映射,非常方便。

  • Mohsen

我有一个好办法,既不需要引用 ORM 组件,也不需要手工写反射,借助 DataTable 和 JsonConvert 即可, 参考如下代码:

        public static void Main(){var dt = new DataTable();dt.Load(yourDataReader);// creates a json array of objectsstring json = Newtonsoft.Json.JsonConvert.SerializeObject(dt);// this is what you're looking for right??List<YourEntityType> list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<YourEntityType>>(json);}

如何高效的将 DataReader 转成 List<T> ?相关推荐

  1. 如何高效的将 DataReader 转成 ListT ?

    咨询区 Anthony: 我在使用第三方工具包,它返回了一个 DataReader,为了能更方便的使用,我希望有一种快捷方法能够将它转成 List<T>,除了一行一行的迭代赋值之外还有其他 ...

  2. JS 如何快速高效的将数组转换成树形结构

    JS 如何快速高效的将数组转换成树形结构 const data = [{id: 1,pid: 0,name: 'body'}, {id: 2,pid: 1,name: 'title'}, {id: 3 ...

  3. [Json] C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json (转载)...

    点击下载 ConvertJson.rar 本类实现了  C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json| 等功能 大 ...

  4. 录音怎么转成文字?教你3个录音转文字方法,简单高效

    录音怎么转成文字?教你3个录音转文字方法,简单高效 大家在日常工作学习中有时候会遇到需要将录音转文字的情况,当我们想把工作会议或者课堂演讲的录音整理成文字,如果是通过回放录音进行打字编辑,不仅繁琐而且 ...

  5. 生态伙伴 | 飞书携手ProcessOn助力企业高效远程办公,共同“战疫”

    新型冠状病毒肆虐,全民一心抗击疫情.近期,各企业积极响应号召,选择延长假期或开启"在家办公"模式,以缓解疫情的扩散. 面对疫情,飞书携手生态伙伴ProcessOn,在2-4月期间为 ...

  6. 远程办公如何保持高效?这群开发者们是这样做的

    远程办公正当时,不同于传统面对面的办公与沟通形式,在远程办公过程中,如何能保持高效的工作状态,成了不少企业与组织的挑战.作为一群开发者们,看飞书的用户@Authing,他们是怎么做的. 本文内容来自于 ...

  7. 多视角人脸正面化生成综述:Multi-view Frontal Face Image Generation: A Survey

    多视角人脸正面化生成综述:Multi-view Frontal Face Image Generation: A Survey 本文首发于极市平台 作者:宁欣1,2,3,南方哲2,3,许少辉2,3,于 ...

  8. 如何把录音转换成文字?这几个方法可以轻松解决录音转文字

    如何把录音转换成文字?在日常工作中,相信很多小伙伴,开会就喜欢拿录音机将会议的内容记录下来,回去边听录音边做整理,但这样效率太慢,其实可以借助录音转文字软件更高效的完成录音整理成文字的工作.下面分享几 ...

  9. 怎么将webm格式转换成mp4,3招轻松学

    怎么将webm格式转换成mp4?相对于已经广为人知的MP4,还有许多人对于WebM这种视频格式不太熟悉.WebM是一种免费开源的媒体文件格式.虽然Web.目前应用范围越来越广泛,但大家还是更习惯使用M ...

最新文章

  1. 第四章 python的turtle库的运用
  2. python双下划线用法详解
  3. ef连接mysql报root没有权限_想要远程连接MySQL,赋予root权限没用啊?一直报语法错误...
  4. IT行业老程序员的经验之谈:爬虫学到什么程度可以找到工作?
  5. springcloud 并发_SpringCloud-Zuul高并发请求下的限流处理
  6. java List接口
  7. IntelliJ IDEA在行尾增加分号
  8. 【NOIP2015提高组】子串 区间DP+滚动数组优化
  9. 【原创】tarjan算法初步(强连通子图缩点)
  10. C#设计模式之15-解释器模式
  11. cdf日上免税店_cdf会员购吐槽大会!从上海日上开始!
  12. hibernate.cfg.xml ,hibernate.properties 关系
  13. android手机系统miui,使用MIUI系统MIUI将无刷机器直接安装在其他品牌的Android手机上...
  14. ATA接口寄存器描写叙述
  15. 【链表】判断链表是否有环
  16. 我的世界自定义脚本生成器易语言源码
  17. DM6437的学习过程
  18. mysql binlog提取sql_导出mysqlbinlog语句
  19. DOM事件总结(事件处理程序的类型及浏览器的兼容性)
  20. otf是什么格式?怎么安装呢?

热门文章

  1. php 中 app cookie管理,详解iOS App开发中Cookie的管理方法
  2. android 实现 效果代码,Android实现雷达View效果的示例代码
  3. C语言回调函数 钩子函数,回调函数和钩子函数的说明
  4. matlab imagesc参数设置,[转载]matlab 中imagesc的用法
  5. kali linux wps 2019 删除_良心推荐!Linux系统下常用办公软件大盘点
  6. 初二物理模型有哪些_老师整理的初二学习方法!自己看完转给孩子看
  7. 六月总结-工作一年总结
  8. arcengine二次开发 获取当前的坐标系统(C++)
  9. QT创建相应文件夹在指定目录下
  10. CUDA零拷贝内存(zerocopy memory)