• C# 相似对象赋值 通过table 互转 另辟蹊径 垃圾简单代码


    using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Linq; using System.Reflection; using System.Text;

    namespace ThinkNet.Utility { ///

    /// List DataTable 转换 ///public class ConvertDataTableToList {

    #region DateTable转List
        /// <summary>
        /// Table转List
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="table"></param>
        /// <returns></returns>
        public static IList<T> ConvertTo<T>(DataTable table)
        {
            if (table == null)
            {
                return null;
            }
    
            List<DataRow> rows = new List<DataRow>();
    
            foreach (DataRow row in table.Rows)
            {
                rows.Add(row);
            }
    
            return ConvertTo<T>(rows);
        }
    
        public static IList<T> ConvertTo<T>(IList<DataRow> rows)
        {
            IList<T> list = null;
    
            if (rows != null)
            {
                list = new List<T>();
    
                foreach (DataRow row in rows)
                {
                    T item = CreateItem<T>(row);
                    list.Add(item);
                }
            }
    
            return list;
        }
    
        public static T CreateItem<T>(DataRow row)
        {
            T obj = default(T);
            if (row != null)
            {
                obj = Activator.CreateInstance<T>();
    
                foreach (DataColumn column in row.Table.Columns)
                {
                    PropertyInfo prop = obj.GetType().GetProperty(column.ColumnName);
                    try
                    {
                        object value = row[column.ColumnName];
                        prop.SetValue(obj, value, null);
                    }
                    catch
                    {  //You can log something here     
                        //throw;    
                    }
                }
            }
    
            return obj;
        }
        #endregion
    
        #region  反射List To DataTable
        /// <summary>
        /// 将List集合类转换成DataTable 
        /// </summary>
        /// <param name="list">集合 </param>
        /// <returns>DataTable</returns>
        public static DataTable ListToDataTable(IList list)
        {
            DataTable result = new DataTable();
            if (list.Count > 0)
            {
                PropertyInfo[] propertys = list[0].GetType().GetProperties();
                foreach (PropertyInfo pi in propertys)
                {
                    //获取类型
                    Type colType = pi.PropertyType;
                    //当类型为Nullable<>时
                    if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                    {
                        colType = colType.GetGenericArguments()[0];
                    }
                    result.Columns.Add(pi.Name, colType);
                }
                for (int i = 0; i < list.Count; i++)
                {
                    ArrayList tempList = new ArrayList();
                    foreach (PropertyInfo pi in propertys)
                    {
                        object obj = pi.GetValue(list[i], null);
                        tempList.Add(obj);
                    }
                    object[] array = tempList.ToArray();
                    result.LoadDataRow(array, true);
                }
            }
            return result;
        }
        #endregion
    }

    }

     

    调用

     
    public List<Sal_SalesOrderLineEx> Get_ListSal_SalesOrderLineEx(List<Sal_SalesOrderLine> Listline)
        {
            DataTable table = ConvertDataTableToList.ListToDataTable(_ListSal_SalesOrderLine);
            IList<Sal_SalesOrderLineEx> list = ConvertDataTableToList.ConvertTo<Sal_SalesOrderLineEx>(table);
            return list.ToList<Sal_SalesOrderLineEx>();
            //  AutoMapper.Mapper.DynamicMap<类A, 类B>(类型A的对象)
        }
  • 相关阅读:
    lnmp配置https,配置pathinfo---------记录学习
    微信公众号第三方授权登录->自带源码-->自己记录学习
    二维数组排序
    php 图片,文件下载
    PHP最彻底的退出登录,清除session、cookie的代码
    php 安装redis扩展
    2020系统综合实践(七)第15组
    2020系统综合实践(六)第15组
    2020系统综合实践(五)
    2020系统综合实践(四)
  • 原文地址:https://www.cnblogs.com/shangdishijiao/p/9145753.html
Copyright © 2020-2023  润新知