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;
- }
- }
- }
|