在上篇博客“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层依次调用
选择‘起始日期’和‘终止日期’点击“查看”按钮,即可查看该段日期段的收取金额记录:
其实在后来的泛型集合(泛型实体类)应用中也遇到了一些问题,最后也算是解决了吧。如果谁想尝试泛型,可以和我交流一下,大家一起沟通学习一下,一起提高!!
来源:CSDN
作者:葵歌小妖
链接:https://blog.csdn.net/hanxuemin12345/article/details/10115789