【c#】把Dataset类型转为List<T>

【c#】把Dataset类型转为List<T>【c#】把Dataset类型转为List<T>

大家好,又见面了,我是你们的朋友全栈君。

    之前分享过将从数据库查出来的datatable数据分页,然后将每一页的数据转成list。前几天搭档觉得这个过程太复杂,建议直接读取数据库返回泛型集合,如题目所说的把dataset类型的数据转为List<T>泛型集合,不过这样做也需要对list进行分页。本着学习的态度,昨天实践了一下这种方法,主要是封装一个dataset to list的工具类。主要代码如下:

        /// <summary>
        /// 获取泛型集合
        /// </summary>
        /// <typeparam name="T">类型</typeparam>
        /// <param name="connStr">数据库连接字符串</param>
        /// <param name="sqlStr">要查询的T-SQL</param>
        /// <returns></returns>
        public IList<T> GetList<T>(string connStr, string sqlStr)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                using (SqlDataAdapter sda = new SqlDataAdapter(sqlStr, conn))
                {
                    DataSet ds = new DataSet();
                    sda.Fill(ds);
                    return DataSetToList<T>(ds, 0);
                }
            }
        }

        /// <summary>
        /// DataSetToList
        /// </summary>
        /// <typeparam name="T">转换类型</typeparam>
        /// <param name="dataSet">数据源</param>
        /// <param name="tableIndex">需要转换表的索引</param>
        /// <returns></returns>
        public IList<T> DataSetToList<T>(DataSet dataSet, int tableIndex)
        {
            //确认参数有效
            if (dataSet == null || dataSet.Tables.Count <= 0 || tableIndex < 0)
                return null;

            DataTable dt = dataSet.Tables[tableIndex];

            IList<T> list = new List<T>();

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                //创建泛型对象
                T _t = Activator.CreateInstance<T>();
                //获取对象所有属性
                PropertyInfo[] propertyInfo = _t.GetType().GetProperties();
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    foreach (PropertyInfo info in propertyInfo)
                    {
                        //属性名称和列名相同时赋值
                        if (dt.Columns[j].ColumnName.ToUpper().Equals(info.Name.ToUpper()))
                        {
                            if (dt.Rows[i][j] != DBNull.Value)
                            {
                                info.SetValue(_t, dt.Rows[i][j], null);
                            }
                            else
                            {
                                info.SetValue(_t, null, null);
                            }
                            break;
                        }
                    }
                }
                list.Add(_t);
            }
            return list;
        }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105672.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • md5值是不是哈希值_2000哈希

    md5值是不是哈希值_2000哈希MD5isachecksumorhashcalculationmethodforfiles.MD5checksumconsistsof128-bitvaluewhichisgenerallyexpressedasthehexadecimalformatwithwhichconsistof32characters.MD5是文件的校验和或哈希…

    2022年9月13日
    0
  • 用pycharm安装python包_pycharm安装模块

    用pycharm安装python包_pycharm安装模块简介在做python开发时,需要很多依赖包,如果已经安装pip,安装依赖包,可以通过命令行;没有安装的,也可以通过PyCharm安装。具体安装步骤1、在File->Setting,如图:2、点击Project:untilted->ProjectInterpreter,如图:3、点击“+”,如图:4、在弹出的“AvailablePackages”的搜索框输入要安装的依赖包,如图:5、点击左下角的“InstallPackage”,如图:6、等待一会,出现如下界面,依赖

    2022年8月29日
    1
  • linux oracle11g安装步骤_oracle11g32位安装

    linux oracle11g安装步骤_oracle11g32位安装目录Oracle11g安装准备工作…1Oracle11g下载地址:…1Oracle11g联机文档:…1Oracle11gR2数据库安装硬件配置要求目录Linux操作系统中Oracle11g数据库安装过程图文详解Oracle11g下载地址:选择需要的oracle安装文件下载Oracle11g联机文档:可以下载其PDF文档参考(其中的有关Linux安装向导是…

    2022年9月2日
    3
  • idea 2021.9最新激活码 mac[最新免费获取]

    (idea 2021.9最新激活码 mac)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1STL…

    2022年3月27日
    64
  • java激活码-激活码分享

    (java激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~B…

    2022年3月22日
    282
  • pycharm 最新激活码(JetBrains全家桶)[通俗易懂]

    (pycharm 最新激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月30日
    121

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号