C#中DataTable和List互转的示例代码

作者:划]破 时间:2022-08-25 21:40:06 

DataTable

DataTable 是 C# 中常用的一种数据表格类型,它类似于数据库中的表格,可以用来存储和处理数据。DataTable 中的数据可以通过行和列来访问和操作,每行代表一个数据项,每列代表一个属性。

以下是一些 DataTable 的常用属性和方法:

  • Columns:列集合。

  • Rows:行集合。

  • NewRow():创建一个新的 DataRow 对象。

  • Load(DataReader):从一个 DataReader 对象中加载数据到 DataTable。

  • Select(filterExpression, sortExpression):根据指定的筛选条件和排序条件返回满足条件的行集合。

  • Merge(DataTable):合并两个 DataTable,返回一个新的 DataTable。

List

List 是 C# 中常用的一种动态数组类型,它可以用来存储任何类型的数据,可以动态增加或删除元素。List 中的元素可以通过索引来访问和操作。

以下是一些 List 的常用属性和方法:

  • Count:元素数量。

  • Add(item):添加一个元素到 List 的末尾。

  • Insert(index, item):在指定的位置插入一个元素。

  • Remove(item):从 List 中删除一个元素。

  • RemoveAt(index):删除指定位置的元素。

  • Contains(item):判断 List 中是否包含指定的元素。

1. DataTable转List

public class DtToList<T> where T : new()  
{
     /// <summary>
     /// datatable to list
     /// </summary>
     /// <param name="dt"></param>
     /// <returns></returns>
     public static  List<T> ConvertToModel(DataTable dt)
     {

         List<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))
                 {
                     if (!pi.CanWrite) continue;
                     object value = dr[tempName];
                     if (value != DBNull.Value)
                        pi.SetValue(t, value, null);
                 }
             }
             ts.Add(t);
         }
         return ts;
     }
}

2. List转DataTable

/// <summary>
/// list to datatable
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="collection"></param>
/// <returns></returns>
public  DataTable  ListToDt<T>(IEnumerable<T> collection)
{
    var props = typeof(T).GetProperties();
    var dt = new DataTable();
    dt.Columns.AddRange(props.Select(p => new
    DataColumn(p.Name, p.PropertyType)).ToArray());
    if (collection.Count() > 0)
    {
        for (int i = 0; i < collection.Count(); i++)
        {
            ArrayList tempList = new ArrayList();
            foreach (PropertyInfo pi in props)
            {
                object obj = pi.GetValue(collection.ElementAt(i), null);
                tempList.Add(obj);
            }
            object[] array = tempList.ToArray();
            dt.LoadDataRow(array, true);
         }
     }
     return dt;
}

来源:https://blog.csdn.net/qq_17847881/article/details/130045667

标签:C#,DataTable,List
0
投稿

猜你喜欢

  • Java如何实现http接口参数和返回值加密

    2023-08-23 12:28:37
  • java实现操作系统的短进程作业调度示例分享

    2022-05-30 21:02:19
  • SpringMVC实现数据绑定及表单标签

    2022-03-24 18:06:47
  • C#通过NPOI操作Excel的实例代码

    2022-01-20 17:26:29
  • 很棒的Android弹幕效果实例

    2022-07-30 17:41:40
  • Java获取json数组对象的实例讲解

    2023-08-24 14:55:28
  • SpringBoot上传临时文件被删除引起报错的解决

    2022-05-28 23:46:24
  • springboot前后台数据交互的示例代码

    2023-11-26 21:15:07
  • Android中AutoCompleteTextView自动提示

    2022-06-21 19:07:36
  • C#实现网页画图功能

    2021-12-05 19:33:41
  • Android实现app应用多语言切换功能

    2023-03-30 20:47:13
  • 详解C#读写Excel的几种方法

    2022-10-23 14:23:28
  • C#实现GridView导出Excel实例代码

    2023-10-29 04:31:09
  • java中对象调用成员变量与成员实例方法

    2023-08-04 11:42:49
  • C++函数指针详解

    2021-10-07 15:49:44
  • maven资源过滤打包后文件变大的处理方法

    2023-10-05 21:38:24
  • C#使用yield关键字构建迭代器详解

    2023-02-09 12:48:49
  • Android开发之组件GridView简单使用方法示例

    2022-11-19 09:35:05
  • Android自定义评分控件的完整实例

    2021-10-26 19:25:58
  • SpringBoot使用Log4j过程详解

    2023-05-03 22:44:12
  • asp之家 软件编程 m.aspxhome.com