DataTable 转换为List 集合

    public static List<T> TableToListModel<T>(DataTable dt) where T : new()
    {
        // 定义集合
        List<T> ts = new List<T>();
        // 获得此模型的类型
        Type type = typeof(T);
        string tempName = "";
        foreach (DataRow dr in dt.Rows)
        {
            T t = new T();
            // 获得此模型的公共属性
            PropertyInfo[] propertys = t.GetType().GetProperties();
            foreach (PropertyInfo pi in propertys)
            {
                tempName = pi.Name;  // 检查DataTable是否包含此列

                if (dt.Columns.Contains(tempName))
                {
                    // 判断此属性是否有Setter
                    if (!pi.CanWrite) continue;
                    bool flag = Convert.IsDBNull(dr[tempName]);
                    if (!flag)
                    {
                        try
                        {
                            if (pi.PropertyType.Name.Contains("Nullable"))
                            {
                                NullableConverter convert = new NullableConverter(pi.PropertyType);
                                object value = convert.ConvertFromString(Dc.ToStr(dr[tempName]));
                                if (value != DBNull.Value)
                                {
                                    pi.SetValue(t, value, null);
                                }
                            }
                            else
                            {
                                object value = Convert.ChangeType(dr[tempName], pi.PropertyType);
                                if (value != DBNull.Value)
                                {
                                    pi.SetValue(t, value, null);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            string msg = ex.Message;
                        }

                    }
                }
            }
            ts.Add(t);
        }
        return ts;
    }

 

posted @ 2022-08-17 13:36  极客船长  阅读(220)  评论(0编辑  收藏  举报