NEWS

[C#] Chia sẽ class convert DataTable to List và convet List sang DataTable

[C#] Chia sẽ class convert DataTable to List<T> và convet List<T> sang DataTable
Đăng bởi: Thảo Meo - Lượt xem: 10489 08:03:53, 21/04/2020C#   In bài viết

Xin chào các bạn, bài viết hôm nay mình sẽ hướng dẫn các bạn hàm convert dữ liệu data DataTable to List<T> và ngược lại, chuyển Một Datarow thành một Object.

  1. Convert List<T> sang một DataTable
 public  DataTable ConvertListOjbectToDataTable<T>(List<T> objectClass, string table_name = "Table" )
{
    DataTable dt = new DataTable();
    try
    {
        dt.TableName = table_name;

        foreach (PropertyInfo property in objectClass[0].GetType().GetProperties())
        {
            dt.Columns.Add(new DataColumn(property.Name, property.PropertyType));
        }

        foreach (var vehicle in objectClass)
        {
            DataRow newRow = dt.NewRow();
            foreach (PropertyInfo property in vehicle.GetType().GetProperties())
            {
                newRow[property.Name] = vehicle.GetType().GetProperty(property.Name).GetValue(vehicle, null);
            }
            dt.Rows.Add(newRow);
        }
        return dt;
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
        return null;
    }
}

2. Convert DataTable to List<T>

public List<T> ConvertToList<T>(DataTable dt)
{
    var columnNames = dt.Columns.Cast<DataColumn>()
            .Select(c => c.ColumnName)
            .ToList();
    var properties = typeof(T).GetProperties();
    return dt.AsEnumerable().Select(row =>
    {
        var objT = Activator.CreateInstance<T>();
        foreach (var pro in properties)
        {
            if (columnNames.Contains(pro.Name))
            {
                 PropertyInfo pI = objT.GetType().GetProperty(pro.Name);
                 pro.SetValue(objT, row[pro.Name] == DBNull.Value ? null : Convert.ChangeType(row[pro.Name], pI.PropertyType));
            }
        }
        return objT;
   }).ToList();
}

3. Convert một DataRow => Object T

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;  
} 

Thanks for watching!

THÔNG TIN TÁC GIẢ

BÀI VIẾT LIÊN QUAN

[C#] Chia sẽ class convert DataTable to List<T> và convet List<T> sang DataTable
Đăng bởi: Thảo Meo - Lượt xem: 10489 08:03:53, 21/04/2020C#   In bài viết

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp
.