泛型的运用(用于查询数据后DataTable转实体类)
2019.8.14 更新
补全了DataTable转泛型集合的方法:
/// <summary>
/// DataTable转实体类集合
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dt">DataTable数据集</param>
public static List<T> SetValueForListByData<T>(DataTable dt) where T : new()
{
List<T> List = new List<T>();
foreach (DataRow dr in dt.Rows)
{
T Entity = new T();
//这里是昨天就发在随笔里的方法,下翻就能看到,
SetValueForEntityByData(Entity, dr);
//下面一段是完整的赋值流程,与上面调用的方法二取一即可。
//PropertyInfo[] propertyInfo = Entity.GetType().GetProperties();
//Type type = Entity.GetType();
//foreach (PropertyInfo item in propertyInfo)
//{
// item.SetValue(Entity, Convert.ChangeType(dr[item.Name], item.PropertyType));
//}
List.Add(Entity);
}
return List;
}
在循环DataTable中的每一行时调用该方法,可避免实体类属性众多时手动赋值的麻烦。
1.有返回值版本,该版本需要注意的是,普通情况下的泛型没有构造器,无法直接通过new关键字实例化,所以需要在方法签名后面加上 where T : new(),为方法内的所有泛型变量添加一个空构造器,使之可以实例化。它最终的效果是实例化实体类并且赋值,然后return赋值结果。
public static T SetValueForEntityByData<T>(DataRow dr) where T : new()
{
T Entity = new T();
PropertyInfo[] propertyInfo = Entity.GetType().GetProperties();
Type type = Entity.GetType();
foreach (PropertyInfo item in propertyInfo)
{
item.SetValue(Entity, Convert.ChangeType(dr[item.Name], item.PropertyType));
}
return Entity;
}
2.无返回值版本,不用担心泛型的实例化,省略where,但是需要能理解引用类型与值类型在内存上的储存方式的区别。它最终的效果是为传入的实体类赋值,并且赋值结果不用经过return便可以体现。
public static void SetValueForEntityByData<T>(T Entity,DataRow dr)
{
Type type = typeof(T);
PropertyInfo[] propertyInfo = Entity.GetType().GetProperties();
foreach (PropertyInfo item in propertyInfo)
{
item.SetValue(Entity, Convert.ChangeType(dr[item.Name], item.PropertyType));
}
}
泛型的运用(用于查询数据后DataTable转实体类)的更多相关文章
- DataTable与实体类的转换
多年前写的DataTable与实体类的转换,已放github 阅读目录 介绍 起因 代码 UnitTest GitHub 介绍 很多年前一直使用Ado.net,后来慢慢转型到其他的orm,在转型过程中 ...
- .net 根据匿名类生成实体类,根据datatable生成实体类,根据sql生成实体类
在开发中可能会遇到这几种情况 1.EF或LINQ查询出来的匿名对象在其它地方调用不方便,又懒的手动建实体类 2.通过datatable反射实体需要先建一个类 ,头痛 3.通过SQL语句返回的实体也需要 ...
- C# DataTable 转 实体类
C# 中查询结果DataTable转实体类: 比如:List<RtmInterview> rtmList = GetDataById( id); public List<RtmInt ...
- 用DataTable填充实体类List
/// <summary> /// 用DataTable填充实体类List /// </summary> public static List<T> FillLis ...
- DataTable与实体类互相转换
/// <summary> /// DataTable与实体类互相转换 /// </summary> /// <typeparam name="T"& ...
- DataTable转实体类
/// <summary> /// DataTable与实体类互相转换 /// </summary> /// <typeparam name="T"& ...
- 【转】DataTable与实体类互相转换
原文地址:https://www.cnblogs.com/marblemm/p/7084797.html /// <summary> /// DataTable与实体类互相转换 /// & ...
- DataTable和实体类通过反射相互转换
using System.Runtime.Serialization; using System.Data; using System.Reflection; using System.Collect ...
- datatable与实体类之间相互转化的几种方法
#region DataTable转换成实体类 /// <summary> /// 填充对象列表:用DataSet的第一个表填充实体类 /// </summary> /// & ...
随机推荐
- python 字典元素删减
- 计算php程序运行时间
<?php //程序运行时间 $starttime = explode(' ',microtime()); echo microtime(); /*········以下是代码区······· ...
- mysql数据库之工作流程
MySQL架构总共四层,在上图中以虚线作为划分. 首先,最上层的服务并不是MySQL独有的,大多数给予网络的客户端/服务器的工具或者服务都有类似的架构.比如:连接处理.授权认证.安全等. 第二层的架构 ...
- redhat6.5安装oracle11_2R
参照前人一步一步操作: http://leihenzhimu.blog.51cto.com/3217508/1685164 遇到如下错误: This is a prerequisite conditi ...
- PyTorch代码调试利器: 自动print每行代码的Tensor信息
本文介绍一个用于 PyTorch 代码的实用工具 TorchSnooper.作者是TorchSnooper的作者,也是PyTorch开发者之一. GitHub 项目地址: https://github ...
- @codeforces - 590E@ Birthday
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定 n 个互不相同的只包含 'a', 'b' 的字符串. 请选 ...
- 在Linux/Unix上运行SuperSocket
SuperSocket通过(Mono 2.10或更新版本)来实现跨平台的特性 由于Unix/Linux不同于Windows上的文件路径格式,SuperSocket提供了专用于Unix/Linux系统上 ...
- H3C 帧中继显示与调试(续)
- H3C 启动包过滤防火墙功能
- 关于移动端弹层下的body滚动
关于移动端弹层下的body滚动 这个问题在移动端挺常见的,网上也有一些解决方法,现在笔者来总结一下:css的解决方案都有兼容问题,js是比较稳定的解决方法(虽然比较麻烦) ps: 本文的例子都是用vu ...