Chuyển đổi DataTable đến List trong c#

Chuyển đổi kiểu dữ liệu DataTable đến List trong c#, các ví dụ chuyển đối kiểu dữ liệu

Chuyển đối DataTable đến List trong C#

Có 2 cách để chuyển đổi dữ liệu kiểu DataTabse sang List trong C#

  1. Sử dụng vòng lặp For
  2. Sử dụng LINQ.
  3. Sử dụng Generic Method.

 

// Hoc vie
class HocVien
{
   
    public HocVien(int ma,string ten)
    {
        Ma = ma;Ten = ten;
    }
    public string Ma { set; get; }
    public string Ten { set; get; }   
}

DataTable dt = new DataTable("HocVien");
dt.Columns.Add("Ma", typeof(string));
dt.Columns.Add("Ten", typeof(string));

// Thêm dữ liệu vào DataTable
dt.Rows.Add(1, "Tran Van A");
dt.Rows.Add(2, "Tran Van B");

// Khai báo biến List để lấy danh sách học viên
List<HocVien> danhsachhocvien = new List<HocVien>();
//Cách 1
for (int i = 0; i < dt.Rows.Count; i++)
{
    HocVien obj = new HocVien();
    obj.Ma =  dt.Rows[i]["Ma"].ToString();
    obj.Ten = dt.Rows[i]["Ten"].ToString();       
    danhsachhocvien.Add(obj );
}
//Cách 2
  danhsachhocvien = (from DataRow dr in dt.Rows
            select new HocVien()
            {
                Ma = dr["Ma"].ToString(),
                Ten =dr["Ten"].ToString()               
            }).ToList();

 // Cách 3:
 // Viết thêm 2 phương thức ConvertDataTable, GetItem bên ngoài
 private static List<T> ConvertDataTable<T>(DataTable dt)
{
    List<T> data = new List<T>();
    foreach (DataRow row in dt.Rows)
    {
        T item = GetItem<T>(row);
        data.Add(item);
    }
    return data;
}
private static T GetItem<T>(DataRow dr)
{
    Type temp = typeof(T);
    T obj = Activator.CreateInstance<T>();

    foreach (DataColumn column in dr.Table.Columns)
    {
        foreach (PropertyInfo pro in temp.GetProperties())
        {
            if (pro.Name == column.ColumnName)
                pro.SetValue(obj, dr[column.ColumnName], null);
            else
                continue;
        }
    }
    return obj;
}
// set giá trị danh sách học viên vào biến qua hàm đã gọi
danhsachhocvien = ConvertDataTable< HocVien >(dt);