Convert DataTable to Generic List in C#

后端 未结 9 1300
既然无缘
既然无缘 2020-12-01 01:28

Disclaimer: I know its asked at so many places at SO.
My query is a little different.

Coding Language: C# 3.5

I have a DataTable named cardsTable that

9条回答
  •  被撕碎了的回忆
    2020-12-01 02:11

    You can map Data Table to model class using a Generic class like below.

    Generic class

     public static class DataTableMappingtoModel
        {
            /// 
            /// Maps Data Table values to coresponded model propertise
            /// 
            /// 
            /// 
            /// 
            public static List MappingToEntity(this DataTable dt) 
            {
                try
                {
                    var lst = new List();
                    var tClass = typeof (T);
                    PropertyInfo[] proInModel = tClass.GetProperties();
                    List proInDataColumns = dt.Columns.Cast().ToList();
                    T cn;
                    foreach (DataRow item in dt.Rows)
                    {
                        cn = (T) Activator.CreateInstance(tClass);
                        foreach (var pc in proInModel)
                        {
    
    
                                var d = proInDataColumns.Find(c => string.Equals(c.ColumnName.ToLower().Trim(), pc.Name.ToLower().Trim(), StringComparison.CurrentCultureIgnoreCase));
                                if (d != null)
                                    pc.SetValue(cn, item[pc.Name], null);
    
    
                        }
                        lst.Add(cn);
                    }
                    return lst;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
        }
    

    Model class

    public class Item
    {
        public string ItemCode { get; set; }
        public string Cost { get; set; }
        public override string ToString()
        {
            return "ItemCode : " + ItemCode + ", Cost : " + Cost;
        }
    }
    

    Create DataTable

    public DataTable getTable()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add(new DataColumn("ItemCode", typeof(string)));
        dt.Columns.Add(new DataColumn("Cost", typeof(string)));
        DataRow dr;
        for (int i = 0; i < 10; i++)
        {
            dr = dt.NewRow();
            dr[0] = "ItemCode" + (i + 1);
            dr[1] = "Cost" + (i + 1);
            dt.Rows.Add(dr);
        }
        return dt;
    }
    

    Now we can convert this DataTable to List like below:

    DataTable dt = getTable();
    List lst = dt.ToCollection();
    foreach (Item cn in lst)
    {
        Response.Write(cn.ToString() + "
    "); }

    Hope will help you

提交回复
热议问题