123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- namespace NXWMS.Client.Code.Converter
- {
- /// <summary>
- /// 模型转换
- /// </summary>
- public static class ModelsConvert
- {
- #region private
- /// <summary>
- /// 模型转换成Datatable
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="collection"></param>
- /// <returns></returns>
- public static DataTable ModelsToDataTable<T>(IEnumerable<T> collection)
- {
- var props = typeof(T).GetProperties();
- var dt = new DataTable();
- dt.Columns.AddRange(props.Where(m => !(m.PropertyType.IsGenericType) && (m.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))).
- 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;
- }
- #endregion
- /// <summary>
- /// Convert a List{T} to a DataTable.
- /// </summary>
- public static DataTable ToDataTable<T>(IEnumerable<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>
- public 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>
- public static Type GetCoreType(Type t)
- {
- if (t != null && IsNullable(t))
- {
- if (!t.IsValueType)
- {
- return t;
- }
- else
- {
- return Nullable.GetUnderlyingType(t);
- }
- }
- else
- {
- return t;
- }
- }
- }
- }
|