using System;
using System.Collections.Generic;using System.Data;using System.Linq;using System.Reflection;using System.Text;using System.Threading.Tasks;using COMMON.DATA;namespace COMMON
{ public static class DataHelper {public static DataTable _data;
public static DataTable Data { get { return _data; } set { _data = value; } }public static DataTable GetData()
{ DATA.ProTestDataContext dataContext=new ProTestDataContext(); var dt = from fx in dataContext.TaskTab select fx; DataTable dtt=new DataTable(); dtt = ConvertToDataTable(dt.ToList()); Data = dtt; return Data; }#region "Convert Generic List to DataTable"
/// <summary> /// Convert a List{T} to a DataTable. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="items"></param> /// <returns></returns> public static DataTable ConvertToDataTable<T>(this 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> /// <param name="t"></param> /// <returns></returns> 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> /// <param name="t"></param> /// <returns></returns> public static Type GetCoreType(Type t) { if (t != null && IsNullable(t)) { if (!t.IsValueType) { return t; } else { return Nullable.GetUnderlyingType(t); } } else { return t; } } #endregion }}