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转实体类)的更多相关文章

  1. DataTable与实体类的转换

    多年前写的DataTable与实体类的转换,已放github 阅读目录 介绍 起因 代码 UnitTest GitHub 介绍 很多年前一直使用Ado.net,后来慢慢转型到其他的orm,在转型过程中 ...

  2. .net 根据匿名类生成实体类,根据datatable生成实体类,根据sql生成实体类

    在开发中可能会遇到这几种情况 1.EF或LINQ查询出来的匿名对象在其它地方调用不方便,又懒的手动建实体类 2.通过datatable反射实体需要先建一个类 ,头痛 3.通过SQL语句返回的实体也需要 ...

  3. C# DataTable 转 实体类

    C# 中查询结果DataTable转实体类: 比如:List<RtmInterview> rtmList = GetDataById( id); public List<RtmInt ...

  4. 用DataTable填充实体类List

    /// <summary> /// 用DataTable填充实体类List /// </summary> public static List<T> FillLis ...

  5. DataTable与实体类互相转换

    /// <summary> /// DataTable与实体类互相转换 /// </summary> /// <typeparam name="T"& ...

  6. DataTable转实体类

    /// <summary> /// DataTable与实体类互相转换 /// </summary> /// <typeparam name="T"& ...

  7. 【转】DataTable与实体类互相转换

    原文地址:https://www.cnblogs.com/marblemm/p/7084797.html /// <summary> /// DataTable与实体类互相转换 /// & ...

  8. DataTable和实体类通过反射相互转换

    using System.Runtime.Serialization; using System.Data; using System.Reflection; using System.Collect ...

  9. datatable与实体类之间相互转化的几种方法

    #region DataTable转换成实体类 /// <summary> /// 填充对象列表:用DataSet的第一个表填充实体类 /// </summary> /// & ...

随机推荐

  1. 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google

    摘要: 作为此次Gartner报告中唯一上榜的中国科技公司,阿里云获得六个评判维度的最高分,排名第二 近日,知名调研机构Gartner发布了全球领先公共云厂商区块链服务能力报告,作为唯一上榜的中国科技 ...

  2. 原生JS使用Blob导出csv文件

    最近在做关于文件下载的需求:前端调用接口,然后对返回数据进行过滤.格式化,然后按表格内容拼接生成csv文件,让用户下载. 具体实现方式如下:let sourceData = { head: [ '时间 ...

  3. Pytorch使用tensorboardX网络结构可视化。超详细!!!

    https://www.jianshu.com/p/46eb3004beca 1 引言 我们都知道tensorflow框架可以使用tensorboard这一高级的可视化的工具,为了使用tensorbo ...

  4. 逆序对(POJ2299 Ultra-QuickSort)

    #include<bits/stdc++.h> using namespace std; int n; ],b[],ans;//a为待排序数组,b为临时数组,ans为逆序对数 void m ...

  5. H3C SSH配置例子

  6. @hdu - 6427@ Problem B. Beads

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 有 m 种不同颜色的珠子,颜色分别为 1~m,每一种颜色的珠子有 ...

  7. Windows系统下三十款优秀开源软件

    Windows系统下三十款优秀开源软件 1.Firefox 官方网站:http://www.getfirefox.com/ 可替换Internet Explorer 功能特点:如果你还没有使用Fire ...

  8. axios用headers传参,设置请求头token

    新建一个配置文件http.js // 导入axios import axios from 'axios'; // 全局配置默认路由 axios.defaults.baseURL = 'http://1 ...

  9. C# Dapper 基本使用 增删改查事务

    来源:https://blog.csdn.net/Tomato2313/article/details/78880969 using DapperTest.Models; using System.C ...

  10. keras 保存模型和加载模型

    import numpy as npnp.random.seed(1337) # for reproducibility from keras.models import Sequentialfrom ...