Method for C to convert DataTable into IList

  • 2021-09-12 01:53:42
  • OfStack

This paper gives an example of how C # realizes the conversion from DataTable to IList. Share it for your reference, as follows:

When developing with C #, it is often necessary to convert DataTable into IList; Operating DataTable is troublesome. It is very convenient to convert DataTable into IList and take object entity as the element of IList.

Note: Entity attributes must correspond to field 11 in the database, or database field name. ToLower (). Contains (Entity attribute name. ToLower ())

Data types temporarily support int, string, DateTime, float, double


using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Reflection;
namespace TBToListTest
{
  public class TBToList<T> where T : new()
  {
    /// <summary>
    ///  Get Column Name Collection 
    /// </summary>
    private IList<string> GetColumnNames(DataColumnCollection dcc)
    {
      IList<string> list = new List<string>();
      foreach (DataColumn dc in dcc)
      {
        list.Add(dc.ColumnName);
      }
      return list;
    }
    /// <summary>
    /// Collection of key-value pairs for attribute names and type names 
    /// </summary>
    private Hashtable GetColumnType(DataColumnCollection dcc)
    {
      if (dcc == null || dcc.Count == 0)
      {
        return null;
      }
      IList<string> colNameList = GetColumnNames(dcc);
      Type t = typeof(T);
      PropertyInfo[] properties = t.GetProperties();
      Hashtable hashtable = new Hashtable();
      int i = 0;
      foreach (PropertyInfo p in properties)
      {
        foreach (string col in colNameList)
        {
          if (col.ToLower().Contains(p.Name.ToLower()))
          {
            hashtable.Add(col, p.PropertyType.ToString() + i++);
          }
        }
      }
      return hashtable;
    }
    /// <summary>
    /// DataTable Convert to IList
    /// </summary>
    /// <param name="dt"></param>
    /// <returns></returns>
    public IList<T> ToList(DataTable dt)
    {
      if (dt == null || dt.Rows.Count == 0)
      {
        return null;
      }
      PropertyInfo[] properties = typeof(T).GetProperties();// Gets a collection of attributes of an entity type 
      Hashtable hh = GetColumnType(dt.Columns);// Collection of key-value pairs for attribute names and type names 
      IList<string> colNames = GetColumnNames(hh);// Collection of column names in attribute order 
      List<T> list = new List<T>();
      T model = default(T);
      foreach (DataRow dr in dt.Rows)
      {
        model = new T();// Create Entity 
        int i = 0;
        foreach (PropertyInfo p in properties)
        {
          if (p.PropertyType == typeof(string))
          {
            p.SetValue(model, dr[colNames[i++]], null);
          }
          else if (p.PropertyType == typeof(int))
          {
            p.SetValue(model, int.Parse(dr[colNames[i++]].ToString()), null);
          }
          else if (p.PropertyType == typeof(DateTime))
          {
            p.SetValue(model, DateTime.Parse(dr[colNames[i++]].ToString()), null);
          }
          else if (p.PropertyType == typeof(float))
          {
            p.SetValue(model, float.Parse(dr[colNames[i++]].ToString()), null);
          }
          else if (p.PropertyType == typeof(double))
          {
            p.SetValue(model, double.Parse(dr[colNames[i++]].ToString()), null);
          }
        }
        list.Add(model);
      }
      return list;
    }
    /// <summary>
    ///  Collection of column names in attribute order 
    /// </summary>
    private IList<string> GetColumnNames(Hashtable hh)
    {
      PropertyInfo[] properties = typeof(T).GetProperties();// Gets a collection of attributes of an entity type 
      IList<string> ilist = new List<string>();
      int i = 0;
      foreach (PropertyInfo p in properties)
      {
        ilist.Add(GetKey(p.PropertyType.ToString() + i++, hh));
      }
      return ilist;
    }
    /// <summary>
    ///  According to Value Find Key
    /// </summary>
    private string GetKey(string val, Hashtable tb)
    {
      foreach (DictionaryEntry de in tb)
      {
        if (de.Value.ToString() == val)
        {
          return de.Key.ToString();
        }
      }
      return null;
    }
  }
}


namespace TBToListTest
{
  // Entity 
  public class Person
  {
    public int ID
    {
      set;
      get;
    }
    public string Name
    {
      set;
      get;
    }
    public string Age
    {
      set;
      get;
    }
    public string Lover
    {
      set;
      get;
    }
  }
}


using System;
using System.Data;
namespace TBToListTest
{
  class Program
  {
    static void Main(string[] args)
    {
      TBToList<Person> tol = new TBToList<Person>();
      Console.WriteLine();
      DataTable dt = GetTable();
      tol.ToList(dt);
      Console.Read();
    }
    public static DataTable GetTable()
    {
      DataTable dt = new DataTable();
      dt.Columns.Add("ID");
      dt.Columns.Add("Age");
      dt.Columns.Add("Lover");
      dt.Columns.Add("Name");
      DataRow dr = dt.NewRow();
      dr["ID"] = 1;
      dr["Age"] = "Age1";
      dr["Lover"] = "Lover1";
      dr["Name"] = "Name1";
      dt.Rows.Add(dr);
      DataRow dr1 = dt.NewRow();
      dr1["ID"] = 2;
      dr1["Age"] = "Age2";
      dr1["Lover"] = "Lover2";
      dr1["Name"] = "Name2";
      dt.Rows.Add(dr1);
      return dt;
    }
  }
}

For more readers interested in C # related content, please check the topics on this site: "C # Data Structure and Algorithm Tutorial", "C # Common Control Usage Tutorial", "C # Object-Oriented Programming Introduction Tutorial" and "C # Programming Thread Use Skills Summary"

I hope this article is helpful to everyone's C # programming.


Related articles: