您的位置:首页 > 其它

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

2013-08-20 17:18 183 查看
上篇博客“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,B、U层依次调用

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







其实在后来的泛型集合(泛型实体类)应用中也遇到了一些问题,最后也算是解决了吧。如果谁想尝试泛型,可以和我交流一下,大家一起沟通学习一下,一起提高!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: