【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)
上一篇 2022年4月25日 上午9:00
下一篇 2022年4月25日 上午9:00


相关推荐

  • 服务器防御DDoS的方法,一文解决DDoS攻击

    服务器防御DDoS的方法,一文解决DDoS攻击近来,DDoS攻击越来越严重,香奈儿韩国分公司在黑客入侵其数据库后发表了道歉声明,表示公司已封锁黑客攻击背后的IP地址,并聘请一家网络安全公司调查此事。广大的网站用户应该采取怎样的措施进行有效的防御呢

    2022年7月1日
    25
  • chgrp命令

    chgrp命令在 lunix 系统里 文件或目录的权限的掌控以拥有者及所诉群组来管理 可以使用 chgrp 指令取变更文件与目录所属群组 这种方式采用群组名称或群组识别码都可以 Chgrp 命令就是 change nbsp group 的缩写 要被改变的组名必须要在 etc group 文件内存在才行 1 命令格式 chgrp nbsp 选项 nbsp 组 nbsp 文件 2 命令功能 chgrp 命令可采用群组名称或群组识别

    2026年3月18日
    2
  • GSLB功能

    GSLB功能GSLB应为一个高效率的智能的DNS服务器,并且可以在基于负载均衡算法的基础上对定义好的域名进行解析。可从如下角度来分析GSLBDNS功能以及标准性对GSLB架构设计算法设计1.严格遵守DNS的相关标准。概括的说是性能优良,功能全面。做为负载均衡设备,性能始终是非常重要的。要能实习高负载大流量下对DNS请求的迅速应答。在功能实现方面DNS相关RFC(rfc1034,…

    2022年6月8日
    85
  • 倒立摆及其应用//2021-2-23[通俗易懂]

    倒立摆及其应用//2021-2-23[通俗易懂]前言:以前搞电赛的时候搞过Pid平衡小车,倒立摆基本实现方法与平衡小车差不多,有一次刚院跑到实验室唠嗑,问你知不知道倒立摆的应用?我说不知道,他说航天火箭····,你们的这些常识太少了,落下这句话就走了,故为了解这些常识,有此小文。正文:一、倒立摆(invertedpendulum)1.概述倒立摆,InvertedPendulum,是典型的多变量、高阶次(有些还分几阶倒立摆【PID中涉及角度还有角速度这样来看多变量高阶层就不难理解了】),非线性、强耦合、自然不稳定系统。倒…

    2022年8月18日
    11
  • pycharmdjango项目实战_python如何创建新项目

    pycharmdjango项目实战_python如何创建新项目创建项目我们创建django项目有两种方式,命令行方式和使用pycharm工具创建,本文就介绍常用的pycharm工具创建首先点击django,输入项目的名称,选择创建好的虚拟环境,最后点击cre

    2022年8月7日
    9
  • 处理机调度算法

    处理机调度算法

    2021年7月3日
    74

发表回复

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

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