| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Data;
- using System.Reflection;
- using System.Text;
- namespace MadRunFabric.Common
- {
- /// <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)
- {
- int i = 0;
- 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[i];//object value = dr[tempName];
- if (pi.PropertyType.Equals(typeof(System.Int64)))
- { pi.SetValue(t, Convert.ToInt64(value), null); }
- else if (pi.PropertyType.Equals(typeof(System.Int32)))
- { pi.SetValue(t, Convert.ToInt32(value), null); }
- else if (pi.PropertyType.Equals(typeof(System.Decimal)))
- { pi.SetValue(t, Convert.ToDecimal(value), null); }
- else if (pi.PropertyType.Equals(typeof(System.DateTime)))
- {
- if (value != DBNull.Value && value.ToString() != "")
- pi.SetValue(t, Convert.ToDateTime(value), null);
- else
- pi.SetValue(t, DateTime.Now, null);
- }
- else
- if (value != DBNull.Value)
- pi.SetValue(t, value, null);
- i++;
- //}
- }
- ts.Add(t);
- }
- return ts;
- }
- // **//// <summary>
- /// 转换IList<T>为List<T> //将IList接口泛型转为List泛型类型
- /// </summary>
- /// <typeparam name="T">指定的集合中泛型的类型</typeparam>
- /// <param name="gbList">需要转换的IList</param>
- /// <returns></returns>
- public static List<T> ConvertIListToList<T>(IList<T> gbList) where T : class //静态方法,泛型转换,
- {
- if (gbList != null && gbList.Count >= 1)
- {
- List<T> list = new List<T>();
- for (int i = 0; i < gbList.Count; i++) //将IList中的元素复制到List中
- {
- T temp = gbList[i] as T;
- if (temp != null)
- list.Add(temp);
- }
- return list;
- }
- return null;
- }
- /// <summary>
- /// 把DataTable转换成指定类型的List
- /// </summary>
- /// <param name="dt"></param>
- /// <returns></returns>
- public static IList<T> ConvertDataTableToList(DataTable dt)
- {
- // 定义集合
- IList<T> ts = new List<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>
- /// 把泛型List转换成DataTable
- /// </summary>
- /// <param name="list"></param>
- /// <returns></returns>
- public static DataTable ConvertListToDataTable(List<T> list)
- {
- DataTable dt = new DataTable();
- // 获得此模型的公共属性
- PropertyInfo[] propertys = typeof(T).GetProperties();
- foreach (PropertyInfo pi in propertys)
- {
- // 判断此属性是否有Getter
- if (!pi.CanRead) continue;
- dt.Columns.Add(pi.Name, pi.PropertyType);
- }
- foreach (T item in list)
- {
- propertys = item.GetType().GetProperties();
- DataRow newRow = dt.NewRow();
- foreach (PropertyInfo pi in propertys)
- {
- if (!pi.CanRead) continue;
- newRow[pi.Name] = pi.GetValue(item);
- }
- dt.Rows.Add(newRow);
- }
- return dt;
- }
- /// <summary>
- /// List集合转DataTable
- /// </summary>
- /// <typeparam name="T">实体类型</typeparam>
- /// <param name="list">传入集合</param>
- /// <param name="isStoreDB">是否存入数据库DateTime字段,date时间范围没事,取出展示不用设置TRUE</param>
- /// <returns>返回datatable结果</returns>
- public static DataTable ListToTable<T>(List<T> list, params string[] propertyName)
- {
- List<string> propertyNameList = new List<string>();
- if (propertyName != null)
- {
- propertyNameList.AddRange(propertyName);
- }
- DataTable result = new DataTable();
- if (list.Count > 0)
- {
- PropertyInfo[] propertys = list[0].GetType().GetProperties();
- foreach (PropertyInfo pi in propertys)
- {
- if (propertyNameList.Count == 0)
- {
- //if (DBNull.Value.Equals(pi.PropertyType))
- //{
- // // pi.PropertyType = DateTime;
- //}
- Type colType = pi.PropertyType;
- if (colType.IsGenericType && colType.GetGenericTypeDefinition() == typeof(Nullable<>))
- {
- colType = colType.GetGenericArguments()[0];
- }
- result.Columns.Add(pi.Name, colType);
- //result.Columns.Add(pi.Name, pi.PropertyType);
- }
- else
- {
- if (propertyNameList.Contains(pi.Name))
- {
- result.Columns.Add(pi.Name, pi.PropertyType);
- }
- }
- }
- for (int i = 0; i < list.Count; i++)
- {
- ArrayList tempList = new ArrayList();
- foreach (PropertyInfo pi in propertys)
- {
- if (propertyNameList.Count == 0)
- {
- object obj = pi.GetValue(list[i], null);
- tempList.Add(obj);
- }
- else
- {
- if (propertyNameList.Contains(pi.Name))
- {
- object obj = pi.GetValue(list[i], null);
- tempList.Add(obj);
- }
- }
- }
- object[] array = tempList.ToArray();
- result.LoadDataRow(array, true);
- }
- }
- return result;
- }
- }
- }
|