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. Android 在图片的指定位置添加标记

    这些天,项目里加了一个功能效果,场景是: 假如有一个家居图片,图片里,有各样的家居用品: 桌子,毛巾,花瓶等等,需要在指定的商品处添加标记,方便用户直接看到商品,点击该标记,可以进入到商品详情页 .实 ...

  2. Python里的迭代器

    迭代器(iterator)协议 · 在Python中,支持迭代器协议就是实现对象的__iter__()和__next__()方法. 1.__iter__()方法:返回迭代器对象本身: 2.__next ...

  3. js判断浏览设备是 手机端,电脑端还是平板端

    console.log(navigator.userAgent); var os = function() { var ua = navigator.userAgent, isWindowsPhone ...

  4. Android Studio(四):Android Studio集成Genymotion

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

  5. Python--day65--模板语言之filter

    参考的原文链接:http://www.cnblogs.com/liwenzhou/p/7931828.html Filters(过滤器) 在Django的模板语言中,通过使用 过滤器 来改变变量的显示 ...

  6. 【Tensorflow】tf.nn.atrous_conv2d如何实现空洞卷积?膨胀卷积

    介绍关于空洞卷积的理论可以查看以下链接,这里我们不详细讲理论: 1.Long J, Shelhamer E, Darrell T, et al. Fully convolutional network ...

  7. [转]解决pip安装太慢的问题

    阅读目录 临时使用: 经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样就能解 ...

  8. jmeter登录配置

    前言: jmeter, Apache下的测试工具, 常用来进行压测, 项目中, 接口通常都需要进行登录才能被调用, 直接调用将提示"登录失效", 下面介绍如何在jmeter中配置参 ...

  9. Ajax与PHP通信

    以下是HTML的Js代码 $data = { va:$('#num').text() }; $.ajax({ type: 'POST', url: "A.php", data: $ ...

  10. C# 判断系统版本

    本文告诉大家如何判断系统是 win7 还是 xp 系统 使用下面代码可以判断 private static readonly Version _osVersion = Environment.OSVe ...