重构——DataTable转泛型
泛型简单介绍
泛型能够最大限度的重用代码、保护类型的安全、提高性能。
泛型最常见的用途是创建集合类
泛型数据类型中使用的信息可在执行时通过反射获取。
能够创建自己的泛型接口、泛型类、泛型方法、泛型事件、泛型托付。
个人理解
我所使用使用的泛型是一个list<>集合。仅仅是集合中的每个元素都是一个实体,而每个实体都相当于DataTable中的一条记录。DataTable是多条记录的集合,而list<>是多个实体的集合。
什么要转泛型?
1、list<T>遍历方便,取到的都是单个的实体。
2、降低输入,仅仅须要传一个实例T就能够获取它的不论什么属性。
3、正确的构建泛型类,能够降低代码中的安全问题。
4、泛型确保了在工作量最小的情况下,为应用程序提供最佳的性能。
泛型实例
以充值为例,实战一下将DataTable转换为泛型,首先我们在D层创建一个类ConverHelper,用于将DataTable转换为泛型。
<span style="font-size:18px;"><strong>Imports System.Reflection '引用反射
Imports System.Collections.Generic
Module ConverHelper
Public Class ConverHelper
Public Shared Function ConvertToList(Of T As New)(dt As DataTable, ts As IList(Of T))
'获得T的类型
Dim type As Type = GetType(T)
'定义一个暂时变量
Dim strTemp As String = String.Empty
'遍历表中全部行数
For Each dr As DataRow In dt.Rows
'定义类型变量act获取动态创建对象T的类型
Dim act As T = If((Nothing Is Nothing), Activator.CreateInstance(Of T)(), Nothing)
'引用反射表示可获得对象的全部属性组成的集合
Dim propertys As PropertyInfo() = act.[GetType]().GetProperties()
'定义array变量。接收propertys中含有的属性,并提供对属性propertys元数据訪问
Dim array As PropertyInfo() = propertys
Dim intCount As Integer = 0
'遍历全部对象属性
While intCount < array.Length 'length表示全部维数中元素的总和
'pr表示元素中含有的属性,并提供对数据訪问
Dim pr As PropertyInfo = array(intCount)
strTemp = pr.Name
'列名=对象的属性名
If dt.Columns.Contains(strTemp) Then
'推断此属性是否设置函数
If pr.CanWrite Then '该属性是否可写
Dim value As Object = dr(strTemp)
'假设非空,则赋值给对象的属性
If value IsNot DBNull.Value Then
'设置对象的属性
pr.SetValue(act, value, Nothing)
End If
End If
End If
intCount += 1
Continue While
End While
'加入对象到泛型集合中
ts.Add(act)
Next
Return ts
End Function
End Class
End Module
</strong></span>
D层中充值窗口调用这个类
<span style="font-size:18px;"><strong>        dt = sqlhelper.ExecSelect(str, CommandType.Text, sqlparamsnew)
        If (dt.Rows.Count > 0) Then
            list = ConverHelper.ConverHelper.ConvertToList(dt, list)
            Return list
        Else
            Throw New Exception("没有记录!")
        End If</strong></span>
此时,D层的返回值类型
<span style="font-size:18px;"><strong> List(Of Entity.RechargeEntity)</strong></span>
事实上当我们接触一些新东西的时候,它可能并没有想象中的那么难,仅仅要去做就能够了。
重构——DataTable转泛型的更多相关文章
- [工具类]DataTable与泛型集合List互转
		
写在前面 工作中经常遇到datatable与list,对于datatable而言操作起来不太方便.所以有的时候还是非常希望通过泛型集合来进行操作的.所以这里就封装了一个扩展类.也方便使用. 类 方法中 ...
 - DataReader,DataTable利用泛型填充实体类
		
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary ...
 - DataTable转实体Model,DataRow转实体Model,DataTable转泛型T,DataRow转泛型T
		
前言,此方法利用反射将DataRow转成实体,由于反射性能不行,大家就看看就行了吧. 代码来啦 using System; using System.Collections.Generic; usin ...
 - 把DataTable转换为泛型List<T>或是JSON
		
在开发ASP.NET Web API或ASP.NET MVC时,我们从数据库得到的数据往往是DataSet或是DataTable.为了能让前端JQuery能方便使用至这些数据,我们需要把这些数据转换为 ...
 - DataTable转泛型List
		
在.net项目研发过程中,有时候需要将从数据库中获取的DataTable数据类型,转换为泛型集合,然后运用LINQ对集合进行操作,我将此总结一下,方便你我他. 核心类: public class Da ...
 - C#中DataTable与泛型集合互转(支持泛型集合中对象包含枚举)
		
最近在做WCF,因为是内部接口,很多地方直接用的弱类型返回(DataSet),这其实是一种非常不好的方式,最近将项目做了修改,将所有接口返回值都修改成强类型,这样可以减少很多与客户端开发人员的沟通,结 ...
 - C#如何根据DataTable生成泛型List或者动态类型list
		
背景:在项目中,sql语句检索返回DataTable,然后根据检索结果做进一步的操作,本篇文章即是介绍如何将DataTable快速生成泛型List返回. 假设存在如下学生类: public class ...
 - 机房重构——泛型和“DataTable”
		
前言 我们都知道在机房重构的时候,大多数都在用七层进行重构,每一层都依赖实体.所以不管怎么调用,返回的应该是实体参数,这样才符合大多数的逻辑,这样我们试想一下,如果我们要求在U层返回多个实体值,怎么办 ...
 - List泛型与DataTable相互转换
		
public static class ExtensionMethods{/// <summary>/// 将List转换成DataTable/// </summary>/// ...
 
随机推荐
- Apache Spark 1.6公布(新特性介绍)
			
Apache Spark 1.6公布 CSDN大数据 | 2016-01-06 17:34 今天我们很高兴可以公布Apache Spark 1.6,通过该版本号,Spark在社区开发中达到一个重要的里 ...
 - single-page关于vue-router
			
最近复习了vue,项目实战前有练手,做一个简单的单页面应用. 1.router-view就是我们渲染的组件,router-view被包裹在一个div中,一旦路由跳转,router-view就会被渲染为 ...
 - 项目: 基于Python socket模块实现的简单 ftp 项目:
			
需要 自己创建一个 info 文件 用来存储用户信息 服务器: import socket import pickle import struct import os import time ''.s ...
 - 使用PLupload在同一页面中进行多个不同类型上传解决方案和一次多文件上传的注意事项
			
首先感谢,http://www.cnblogs.com/2050/p/3913184.html 这篇文章作者. 在使用PLUpload之前个人先封装了一些常用配置,并且将success与error做为 ...
 - theme- 工作原理
			
首先看一下theme中的设置,代码如下 <?xml version="1.0" encoding="utf-8"?> <resources&g ...
 - eclipse- 智能提示设置
			
最近自己ubuntu 下的eclipse没办法只能提示了.后来在网上查了方法,完美解决了问题 1.java代码编辑的时候不提示 具体如下 Windows→Preferences→Java→Editor ...
 - MYSQL存储过程中 使用变量 做表名--转
			
原文地址:http://blog.csdn.net/business122/article/details/7528859 今天写一个对数据库做快照的存储过程,用到了动态表名,突然发现MYSQL不支持 ...
 - Eclipse&STS常用小技巧
			
开发是经常用到的代码可进行快捷提示,比如mian alt+/就提示出了main方法是不是很方便,为什么就能提示出来呢? 马上来了: 在你使用的java开发工具中点击Window--->Prefe ...
 - eclipse中修改了代码编译后执行不起作用
			
在网上试了好多方法都没解决 后来,删了eclipse里的服务器,重新创建了一下,重新运行自己的工程发现修改的代码起作用了.
 - WPF 入门《常用控件》
			
1.GroupBox 注意: GroupBox仍然需要布局容器来放置元素.如: StackPanel面板 <GroupBox Header="select number?"& ...