文档章节

泛型举例:List<T>与DateTable相互转换

o
 osc_pn11u1x9
发布于 2018/08/06 09:58
字数 251
阅读 16
收藏 0

精选30+云产品,助力企业轻松上云!>>>

一、 DataTable转换到List<T>

/// <summary>   
/// TableToList   
/// </summary> 
public class TableListConverter<T> where T : class, new()
{
    public static IList<T> TableToList(DataTable dt)
    {

        IList<T> ts = new List<T>();// 定义集合
        Type type = typeof(T);// 获得此模型的类型
        string tempName = "";
        foreach (DataRow dr in dt.Rows)
        {
            T t = new T();
            // 获得此模型的公共属性
            PropertyInfo[] propertys = t.GetType().GetProperties();
            foreach (PropertyInfo pi in propertys)
            {
                tempName = pi.Name;
                if (dt.Columns.Contains(tempName))// 检查DataTable是否包含此列
                {
                    if (!pi.CanWrite) continue;// 判断此属性是否有Setter

                    object value = dr[tempName];
                    if (value != DBNull.Value)
                        pi.SetValue(t, value, null);
                }
            }
            ts.Add(t);
        }

        return ts;

    }
}

应用:

// 获得查询结果 
DataTable dt = DbHelper.ExecuteDataTable("...");
// 把DataTable转换为IList<UserInfo> 
IList<UserInfo> users = TableListConverter<UserInfo>.TableToList(dt);


二、 List<T>转换到DataTable

/// <summary>   
/// ListToTable   
/// </summary>   
public class TableListConverter
{
    public static DataTable ListToTable<T>(IList<T> list) where T : class, new()
    {
        if (list == null) return null;
        Type type = typeof(T);
        DataTable dt = new DataTable();

        PropertyInfo[] properties = Array.FindAll(type.GetProperties(), p => p.CanRead);//判断此属性是否有Getter
        Array.ForEach(properties, prop => { dt.Columns.Add(prop.Name, prop.PropertyType); });//添加到列
        foreach (T t in list)
        {
            DataRow row = dt.NewRow();
            Array.ForEach(properties, prop =>
            {
                row[prop.Name] = prop.GetValue(t, null);
            });//添加到行
            dt.Rows.Add(row);
        }
        return dt;
    }
}

应用:

//IList<UserInfo> users 
DataTable dt =TableListConverter.ListToTable(users)

032_结果

033_结果

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Kotlin Primer·第六章·集合泛型与操作符

Kotlin Primer·第六章·集合泛型与操作符 无论何时,请保持学者的谦逊与宽容2017-06-0717 阅读 Android 本文开源实验室原创,转载请以链接形式注明地址: https://kymjs.com/code/2017/06/0...

无论何时,请保持学者的谦逊与宽容
2017/06/07
0
0
深入理解Java泛型

<div data-v-253c8433="" data-id="5b63b7926fb9a04fb8776959" itemprop="articleBody" class="article-content"><h2 class="heading" data-id="heading-0">泛型是什么</h2><p>一说到泛型,大......

osc_j9j4nvy3
2019/10/23
2
0
java静态方法使用泛型

<div id="contentviews" class="markdownviews"> <pre class="prettyprint" name="code"><code class="language-java hljs has-numbering" onclick="mdcp.signin(event)" style="position: u......

osc_da4rblss
2019/09/17
0
0
java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

<div id="cnblogspostbody" class="blogpost-body"><div class="cnblogs_code"><pre><span style="font-size: 14px;">对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现......

osc_13a0punx
2019/05/21
1
0
通过反射将Datetable转换为泛型List<T>

// 定义集合

osc_vo8kvenl
2018/07/01
2
0

没有更多内容

加载失败,请刷新页面

加载更多

linux下java环境搭建

1、jdk下载: 官方地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html 如下图所示,我这边选择的是红框中的版本 2、压缩包上传至服务器 将下载的压缩包上传...

wc_飞豆
51分钟前
17
0
面试题:Java对象不再使用时,为什么要赋值为null?

前言 许多Java开发者都曾听说过“不使用的对象应手动赋值为null“这句话,而且好多开发者一直信奉着这句话;问其原因,大都是回答“有利于GC更早回收内存,减少内存占用”,但再往深入问就回...

码农突围
53分钟前
22
0
设计模式(5) 原型模式

原型模式 原型模式的适用场景 浅拷贝 深拷贝 用Initialize方法修改初始化状态 原型模式与之前学习的各种工厂方法、单例模式、建造者模式最大、最直观的区别在于,它是从一个既有的对象“克隆...

zhixin9001
53分钟前
7
0
获取免费的pycharm激活码网站

http://www.lookdiv.com/

云烟成雨forever
53分钟前
27
0
用Helm部署Kubernetes应用,支持多环境部署与版本回滚

1 前言 Helm是优秀的基于Kubernetes的包管理器。利用Helm,可以快速安装常用的Kubernetes应用,可以针对同一个应用快速部署多套环境,还可以实现运维人员与开发人员的职责分离。现在让我们安...

南瓜慢说
54分钟前
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部