用了一段时间的Dapper,感觉Dapper比Ado.net好的地方就是转换成实体,到处查资料,写了以下方法,直接可以用。

using (var conn = new SqlConnection("server=.;database=testdb;uid=testdb;pwd=123456"))
            {
                conn.Open();
                var query = "select * from city";
                var cmd = new SqlCommand(query, conn);
                using (var reader = cmd.ExecuteReader())
                {
                    var citylist = reader.ToList<city>(); //可以取到值,测试OK
                   // reader.Close();
                }
                conn.Close();
            }


public static class DbDataReaderExtensions
    {
        public static List<T> ToList<T>(this DbDataReader dbdatareader)
        {
            List<T> list = new List<T>();
            List<string> fields = null;
            using (dbdatareader)
            {
                if (fields == null)
                {
                    fields = new List<string>(dbdatareader.FieldCount);
                    for (int i = 0; i < dbdatareader.FieldCount; i++)
                    {
                        fields.Add(dbdatareader.GetName(i).ToLower());
                    }
                }

while (dbdatareader.Read())
                {
                    T model = Activator.CreateInstance<T>();
                    foreach (PropertyInfo property in model.GetType().GetProperties(BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance))
                    {
                        if (fields.Contains(property.Name.ToLower()))
                        {
                            if (!dbdatareader.IsDBNull(dbdatareader.GetOrdinal(property.Name)))
                            {
                                Type convertTo = Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType;
                                property.SetValue(model, Convert.ChangeType(dbdatareader[property.Name], convertTo), null);
                            }
                        }
                    }
                    list.Add(model);
                     
                }
                dbdatareader.Close();
                dbdatareader.Dispose();
            }
            return list;         
        }

}

DataReader To List的更多相关文章

  1. 报错:已有打开的与此命令相关联的 DataReader,必须首先将它关闭。

    SqlParameter[] sp = { new SqlParameter("@nGridID",SqlDbType.BigInt), new SqlParameter(&quo ...

  2. DataReader

    Datareader对象不能关使用new关键字创建.但可以使用ExecuteReader()方法创建. DataReader是一行一行的读取记录的.当记录中有数据时Read()返回TRUE,当到记录集 ...

  3. code first提示已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭解决方法

    使用codefirst查询当然是必不可少的,但有时不小心可能很简单的查询也会导致异常. 下面用codefirst做个示例简单演示下异常发生的场景: var attendlist = db.Databa ...

  4. 将DataReader转换为DataTable

    public static DataTable ConvertDataReaderToDataTable(SqlDataReader dataReader) { ///定义DataTable Data ...

  5. C# 之 DataReader 和 DataSet 的区别

    本文转载自:http://www.cnblogs.com/xinaixia/p/4920630.html 1. 获取数据的方式[1]DataReader 为在线操作数据, DataReader会一直占 ...

  6. C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。

    C#中对象,字符串,dataTable.DataReader.DataSet,对象集合转换成Json字符串方法. public class ConvertJson { #region 私有方法 /// ...

  7. 【2016-11-2】【坚持学习】【Day17】【通过反射自动将datareader转为实体info】

    通过ADO.net 查询到数据库的数据后,通过DataReader转为对象Info public class BaseInfo { /// <summary> /// 填充实体 /// & ...

  8. 原创 Datareader 导出为csv文件方法

    DataReader 是游标只读数据, 如果是大数据导出,用Datatable 将耗费巨大内存资源.因为Datatable 其实就是内存中的一个数据表 代码如下 /// <summary> ...

  9. DataReader用法

    一.DataReader含义 DataReader相比于DataSet,DataReader是一个抽象类,所以不能用DataReader DR = new DataReader(),来构造函数创建对象 ...

  10. DataReader和DataSet的异同

    DataReader:使用时始终占用SqlConnection,在线操作数据库:每次只在内存中加载一条数据,所以占用的内存是很小的:是只进的. 只读的. DataSet:则是将数据一次性加载在内存中. ...

随机推荐

  1. 史上最完整Hadoop2.x完全分布式安装部署-小白也能学会

    一.环境要求: 1.        虚拟机安装并设置网络: 2.        修改主机地址映射: 3.        必备软件:Jdk.Development Tools   Development ...

  2. MySQL 5.7中 performance_schema 替代 show profile 命令

    本文出处:http://www.cnblogs.com/wy123/p/6979499.html show profile 命令用于跟踪执行过的sql语句的资源消耗信息,可以帮助查看sql语句的执行情 ...

  3. vue-schart : vue.js 的图表组件

    介绍 vue-schart 是使用vue.js封装了sChart.js图表库的一个小组件.支持vue.js 1.x & 2.x 仓库地址:https://github.com/lin-xin/ ...

  4. MVC中控制器当中需要绑定SelectList,也就是所谓的DropDownList

    ViewData["moduleList"] = new SelectList(new El_Basic_ModuleInfo().Rows().AsEnumerable(), & ...

  5. 性能测试常用sql技巧_Oracle

    做了一段时间的性能测试,把自己在性能测试过程中,使用到的Oracle中用到的sql语句整理一番,做个备忘: (1)多个字段以某种格式拼接 "||"字符串拼接符; 示例:将" ...

  6. SQL中的cast()函数

    CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型.CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型. 语法: CAST (expression AS dat ...

  7. fpm 制作 rpm 包

    支持的 源类型包 ① dir : 将目录打包成所需要的类型, 可用于源码编译安装软件包 ② rpm : 对 rpm 包进行转换 ③ gem : 对 rubygem 包进行转换 ④ python : 将 ...

  8. XCOM2中敌对生物设计分析(ADVENT篇)

    最近,在制作游戏Demo--DroneAssmble的过程中,对于敌对生物的设计,参考了幽浮系列的相关设定,因此着手对幽浮2中的主要敌人进行分析. 我们知道, XCOM2中的敌对生物主要由" ...

  9. Tomcat网页加载速度过慢的解决方法

    可以vim conf/server.xml,在# OS specific support.  $var _must_ be set to either true or false.下添加: JAVA_ ...

  10. 【Android Developers Training】 80. 管理网络使用

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...