DataSet转换为泛型集合List(Of T)

守給你的承諾、 提交于 2019-12-07 05:10:59

上篇博客“DataTable转换为实体(函数)”的介绍的最后提出了这样的问题:

思考问题:函数返回值为实体,这意味着什么?

         意味着该函数的返回记录只能有一条,对不对?因为一个实体只能“保存”一条记录。

        像查看某学生基本信息、某用户基本信息——某个人的基本信息只能有一条记录(学生实体:卡号、学号、姓名、…)吧,好,可有定义返回实体函数

思考问题: 但是,如果“根据日期查看所有收取金额记录”——不止一条记录吧,给你U层返回一个实体,能实现此功能吗?当然不能。

如何解决?

         面对此问题,如何解决,你想过吗?——你说,返回DataSet或DataTable不就得了吗。你看,Out了吧….

           偷偷告诉大家,还是返回实体,但是这次不是返回一个实体啦,是返回”一群“实体(实体集合)

(上篇博客链接:《DataSet转换为实体(函数)》

 

本篇博客就介绍,如果由DataSet转换为泛型集合(集合中存放的是实体,即:实体集合) 涉及到“泛型”知识点,请参考:《泛型》

 

例子:机房收费系统——查看某段日期内收取金额记录

只写D层

 

1,查询某段日期内收取金额记录——CheckGetRechargeInfo(参数)——返回值:充值信息实体泛型集合

 

2,数据集转换为泛型集合——DataSetToList(参数)——返回值:充值信息实体的泛型集合 

   ''' <summary>        ''' 数据表转换为泛型集合
        ''' </summary>
        ''' <param name="dt">数据表</param>
        ''' <returns>充值基本信息实体的泛型集合</returns>
        ''' <remarks></remarks>
        Public Function DataSetToList(ByVal dt As DataTable) As IList(Of Entity.RechargeInfoEntity) Implements IDAL.IRechargeInfoDAL.DataSetToList
            '定义泛型集合
            Dim list As New List(Of Entity.RechargeInfoEntity)
            Dim type As Type = GetType(Entity.RechargeInfoEntity)
            '定义临时变量
            Dim tempName As String

            '遍历数据表中的每一行
            For Each dr As DataRow In dt.Rows
                '创建充值基本信息实体类
                Dim enRechargeInfo As New Entity.RechargeInfoEntity
                Dim Propertys() As System.Reflection.PropertyInfo = enRechargeInfo.GetType().GetProperties() '获得实体类enRechargeInfo的所有属性,并存放到数组中
                '遍历该对象的所有属性
                For Each pi As System.Reflection.PropertyInfo In Propertys
                    tempName = pi.Name '将属性名称赋值给临时变量

                    '检查DataTable是否包含此列(列名=对象的属性名)
                    If dt.Columns.Contains(tempName) Then '如果包含此列
                        If Not pi.CanWrite Then '如果该属性不可写,直接跳出
                            Continue For
                        End If
                        '如果该属性可写入
                        Dim value As Object = dr(tempName)
                        '如果非空,则赋给对象的属性
                        If Not IsNothing(value.ToString()) Then
                            Dim a As String = value.ToString().Trim()
                            pi.SetValue(enRechargeInfo, a, Nothing)

                        End If
                    End If

                Next
                list.Add(enRechargeInfo) '将充值信息实体添加到集合中
            Next

            Return list '返回泛型集合

        End Function


 

3,BU层依次调用

选择‘起始日期’和‘终止日期’点击“查看”按钮,即可查看该段日期段的收取金额记录:

 

 

其实在后来的泛型集合(泛型实体类)应用中也遇到了一些问题,最后也算是解决了吧。如果谁想尝试泛型,可以和我交流一下,大家一起沟通学习一下,一起提高!!

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!