您的位置:

从List转DataTable谈起

一、List转DataTable的概述

List和DataTable都是常用的数据容器,在实际开发中,我们常常需要在这两个容器之间进行数据的转换。List转DataTable就是把List中的数据转换成DataTable格式的形式,便于进行数据处理和存储。

二、List转DataTable的实现

1. List转DataTable去重

在List转换成DataTable的过程中,如果List中有一些重复数据的话,转换成DataTable的时候就会出现重复数据。解决重复数据的方法可以使用Linq的Distinct()方法进行去重操作。以下是C#示例代码:

//使用Linq的Distinct()方法进行去重操作 
var distinctList = list.Distinct();
DataTable dataTable = new DataTable();
//转换List中数据到DataTable
foreach (var item in distinctList)
{
    var properties = item.GetType().GetProperties();
    if (dataTable.Columns.Count == 0)
    {
        foreach (var property in properties)
        {
            dataTable.Columns.Add(new DataColumn(property.Name, property.PropertyType));
        }
    }
    DataRow row = dataTable.NewRow();
    foreach (var property in properties)
    {
        row[property.Name] = property.GetValue(item);
    }
    dataTable.Rows.Add(row);
}

2. List转DataTable取名

当我们把List转换成DataTable时,需要给每个DataTable的列起个名字。以下是C#示例代码:

 DataTable dataTable = new DataTable("MyDataTable");
 foreach (var property in typeof(MyObject).GetProperties())
 {
     dataTable.Columns.Add(new DataColumn(property.Name));
 }

3. List转DataTable保留字段类型

在List转换成DataTable的过程中,我们需要将List中的数据类型保留到DataTable中。以下是C#示例代码:

DataTable dataTable = new DataTable();
foreach(var property in typeof(MyObject).GetProperties())
{
    dataTable.Columns.Add(new DataColumn(property.Name, property.PropertyType));
}
foreach(var item in list)
{
    DataRow row = dataTable.NewRow();
    foreach (var property in typeof(MyObject).GetProperties())
    {
        row[property.Name] = property.GetValue(item);
    }
    dataTable.Rows.Add(row);
}

三、其他List转DataTable的情况

1. List转String

在有些情况下,我们需要把List中的数据转换成String类型,这时候我们可以使用String.Join()方法进行转换,示例如下:

List list = new List
   {"a","b","c","d"};
string result = String.Join(",",list);

   
  

2. List转Map

如果要把List转换成Map的话,可以使用Linq的ToDictionary()方法进行转化,示例如下:

List list = new List
   {new MyObject(){id=1,name="aaa"}};
Dictionary
     map = list.ToDictionary(x=>x.id,x=>x.name);

    
   
  

3. List转Json

如果要把List转换成Json格式,可以使用JavascriptSerializer类进行转换,示例如下:

List list = new List
   {new MyObject(){id=1,name="aaa"}};
var json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(list);

   
  

4. List转Set

在C#中没有Set这种数据结构,但是可以通过HashSet来实现Set的功能。将List转换成Set时,可以使用HashSet的构造方法来实现,示例如下:

List list = new List
   {"a","b","c","d"};
HashSet
     set = new HashSet
     (list);

     
    
   
  

5. List转Array

把List转换成Array可以使用List的ToArray()方法进行转换,示例如下:

List list = new List
   {"a","b","c","d"};
string[] array = list.ToArray();

   
  

6. List转Tensor

List转Tensor涉及到机器学习框架TensorFlow的知识,如果需要使用TensorFlow的话,可以使用TensorFlowSharp将List转换成Tensor。以下是C#示例代码:

List list = new List
   {new float[]{1,2,3}};
var tensor = new TensorFlow.Tensor(list);

   
  

四、总结

本文我们讨论了从各个方面实现将List转换成DataTable的方法,包括字段去重、名称设置、类型保留、转化成String、Map、Json、Set、Array和Tensor等。我们可以根据实际场景需求来选择相应的方法来实现。