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

来源:互联网 发布:网络实名制 言论自由 编辑:程序博客网 时间:2024/04/28 03:49

上篇博客“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层依次调用

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

 

 

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

 

原创粉丝点击