zoukankan      html  css  js  c++  java
  • 常用方法 DataTable转换为Entitys

    备注:摘自网上 有附地址

    public static List<T> DataTableToEntities<T>(this DataTable dt) where T : class, new()
            {
                if (null == dt || dt.Rows.Count == 0) { return null; }
                List<T> entities = new List<T>();
                List<string> columnNames = new List<string>();
    
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    columnNames.Add(dt.Columns[i].ColumnName);
                }
    
    
    
                foreach (DataRow row in dt.Rows)
                {
                    PropertyInfo[] pArray = typeof(T).GetProperties();
                    T entity = new T();
    
                    Array.ForEach<PropertyInfo>(pArray, p =>
                    {
                        if (!columnNames.Contains(p.Name))
                        {
                            return;
                        }
    
                        object cellvalue = row[p.Name];
    
                        //空值不处理
                        if (cellvalue == DBNull.Value)
                        {
                            return;
                        }
                        if ((cellvalue == null) || string.IsNullOrWhiteSpace(cellvalue.ToString().Trim()))
                        {
                            return;
                        }
    
                        if (cellvalue != DBNull.Value)
                        {
                            //经过了几个版本的迭代,最后一个为最新的,摘自网上,已附原文地址
    
                            //4、原地址:https://blog.csdn.net/Simon1003/article/details/80839744
                            if (!p.PropertyType.IsGenericType)
                            {
                                p.SetValue(entity, Convert.ChangeType(cellvalue, p.PropertyType), null);
                            }
                            else
                            {
                                Type genericTypeDefinition = p.PropertyType.GetGenericTypeDefinition();
                                if (genericTypeDefinition == typeof(Nullable<>))
                                {
                                    p.SetValue(entity, Convert.ChangeType(cellvalue, Nullable.GetUnderlyingType(p.PropertyType)), null);
                                }
                                else
                                {
                                    throw new Exception("genericTypeDefinition != typeof(Nullable<>)");
                                }
                            }
    
    
                            //3、原地址:https://blog.csdn.net/hebbers/article/details/78957569
                            //Type type = p.PropertyType;
                            //if (type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))//判断convertsionType是否为nullable泛型类  
                            //{
                            //    //如果type为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换
                            //    System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(type);
                            //    //将type转换为nullable对的基础基元类型
                            //    type = nullableConverter.UnderlyingType;
                            //}
                            //p.SetValue(entity, Convert.ChangeType(cellvalue, type), null);
    
    
                            //2、自定义 这种很傻,但当前解决速度最快
                            //if (p.PropertyType.Name.Equals("Int32"))
                            //{
                            //    p.SetValue(entity, Convert.ToInt32(value), null);
                            //}
                            //else if (p.PropertyType.Name.Equals("String"))
                            //{
                            //    p.SetValue(entity, Convert.ToString(value), null);
                            //}
                            //else if (p.PropertyType.Name.Equals("Nullable`1"))
                            //{
                            //    p.SetValue(entity, Convert.ToInt32(value), null);
                            //}
                            ////其它类型 暂时不管 
    
    
                            //1、字段不为空可以用这种
                            //p.SetValue(entity, value, null);
                        }
                    });
                    entities.Add(entity);
                }
                return entities;
            }
  • 相关阅读:
    动态传参
    函数的介绍
    文件的操作
    send email with formatted table
    minimize and close window with customed winform
    python algorithm
    something important about docker
    book list
    which language is suitable for what to do
    Find Duplicate Items in list fast
  • 原文地址:https://www.cnblogs.com/guxingy/p/11362720.html
Copyright © 2011-2022 走看看