| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 | using System;using System.Collections;using System.Collections.Generic;using System.Data;using System.Linq;using System.Reflection;using System.Text;using System.Threading.Tasks;namespace WCS_Client.Utility{    /// <summary>    /// 实体转换辅助类    /// </summary>    public class ModelConvertHelper<T> where T : new()    {        public static IList<T> ConvertToModel(DataTable dt)        {            // 定义集合                IList<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;                        object value = dr[tempName];                        if (value != DBNull.Value)                            pi.SetValue(t, value, null);                    }                }                ts.Add(t);            }            return ts;        }    }    /// <summary>    /// Datatble转list    /// </summary>    public class DatatableConvertHelper    {        /// <summary>        /// Convert a List{T} to a DataTable.        /// </summary>        public static DataTable ToDataTable<T>(List<T> items)        {            var tb = new DataTable(typeof(T).Name);            PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);            foreach (PropertyInfo prop in props)            {                Type t = GetCoreType(prop.PropertyType);                tb.Columns.Add(prop.Name, t);            }            foreach (T item in items)            {                var values = new object[props.Length];                for (int i = 0; i < props.Length; i++)                {                    values[i] = props[i].GetValue(item, null);                }                tb.Rows.Add(values);            }            return tb;        }        /// <summary>        /// Determine of specified type is nullable        /// </summary>        private static bool IsNullable(Type t)        {            return !t.IsValueType || (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>));        }        /// <summary>        /// Return underlying type if type is Nullable otherwise return the type        /// </summary>        private static Type GetCoreType(Type t)        {            if (t != null && IsNullable(t))            {                if (!t.IsValueType)                {                    return t;                }                else                {                    return Nullable.GetUnderlyingType(t);                }            }            else            {                return t;            }        }        public static DataTable ToDataTable<T>(IEnumerable<T> collection)        {            var props = typeof(T).GetProperties();            var dt = new DataTable();            dt.Columns.AddRange(props.Select(p => new DataColumn(p.Name, p.PropertyType)).ToArray());            if (collection.Count() > 0)            {                for (int i = 0; i < collection.Count(); i++)                {                    ArrayList tempList = new ArrayList();                    foreach (PropertyInfo pi in props)                    {                        object obj = pi.GetValue(collection.ElementAt(i), null);                        tempList.Add(obj);                    }                    object[] array = tempList.ToArray();                    dt.LoadDataRow(array, true);                }            }            return dt;        }    }}
 |