C#中泛型举例List<T>与DataTable相互转换

 更新时间:2022年05月11日 08:07:05   作者:springsnow  
这篇文章介绍了C#中泛型举例List<T>与DataTable相互转换的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、 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)

到此这篇关于C#中泛型举例List<T>与DataTable相互转换的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C#连接Oracle数据库使用Oracle.ManagedDataAccess.dll

    C#连接Oracle数据库使用Oracle.ManagedDataAccess.dll

    这篇文章主要介绍了C#使用Oracle.ManagedDataAccess.dll的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • C# RabbitMQ的使用详解

    C# RabbitMQ的使用详解

    本文主要介绍了C# RabbitMQ的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • WPF自动隐藏的消息框的实例代码

    WPF自动隐藏的消息框的实例代码

    本文给大家介绍WPF自动隐藏的消息框实例代码,当鼠标放上去将一直显示,移开动画继续,提供normal和error两种边框。非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧
    2016-07-07
  • C#中判断字符串是全角还是半角的实现代码

    C#中判断字符串是全角还是半角的实现代码

    本篇文章主要是对C#中判断字符串是全角还是半角的实现代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • C# wpf定义ViewModelBase进行简化属性绑定

    C# wpf定义ViewModelBase进行简化属性绑定

    绑定机制是wpf的核心,也是界面独立的根本,尤其是使用了mvvm模式,本文主要介绍了wpf如何定义ViewModelBase进行简化属性绑定,需要的可以参考下
    2024-04-04
  • WPF实现带筛选功能的DataGrid

    WPF实现带筛选功能的DataGrid

    在默认情况下,WPF提供的DataGrid仅拥有数据展示等简单功能,如果要实现像Excel一样复杂的筛选过滤功能,则相对比较麻烦。本文以一个简单的小例子,简述如何通过WPF实现DataGrid的筛选功能,仅供学习分享使用,如有不足之处,还请指正
    2023-03-03
  • C#代码实现PDF文档操作类

    C#代码实现PDF文档操作类

    本篇文章给大家介绍使用pdf文档操作C#代码,本文代码非常简单,代码附有注释,需要注意的是:需要添加itextsharp.dll引用才可以正常通过编译,感兴趣的朋友可以参考下
    2015-10-10
  • C# .NET实现扫描识别图片中的文字

    C# .NET实现扫描识别图片中的文字

    本文以C#及VB.NET代码为例,介绍如何扫描并读取图片中的文字。文中的示例代码介绍详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起学习一下
    2021-12-12
  • C# BitArray(点矩阵)转换成int和string的方法实现

    C# BitArray(点矩阵)转换成int和string的方法实现

    BitArray 类管理一个紧凑型的位值数组,它使用布尔值来表示,本文主要介绍了C# BitArray(点矩阵)转换成int和string的方法实现,具有一定的参考价值,感兴趣的可以了解一下
    2022-05-05
  • 在.NET框架使用C#实现PDF文件转为HTML格式的步骤

    在.NET框架使用C#实现PDF文件转为HTML格式的步骤

    HTML作为一种开放标准的网页标记语言,具有跨平台、易于浏览和搜索引擎友好的特性,通过将PDF文件转换为HTML格式,我们可以更方便地在浏览器中展示PDF文档内容,本文将介绍如何在.NET框架使用C#将PDF文件转换为HTML格式,需要的朋友可以参考下
    2025-01-01

最新评论