/// <summary> /// 直接属性转换 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="lst"></param> /// <returns></returns> public static DataTable FormEntityToTable <T>(this IList <T> lst) { DataTable dt = new DataTable(); if (!cacheDataTable.ContainsKey(typeof(T).FullName)) { var properties = typeof(T).GetProperties(); foreach (var p in properties) { dt.Columns.Add(p.Name, p.PropertyType); } } else { dt = cacheDataTable[typeof(T).FullName].Clone(); } //1.如果调用table转换 //LoadDataTable<T> load = (LoadDataTable<T>)PersonToDataTable<T>().CreateDelegate(typeof(LoadDataTable<T>)); LoadDataTable <T> load = Find <T>(); foreach (var item in lst) { load(dt, item); } ////2.如果调用行转换(控制度大些) //LoadDataRow<T> loadrow = (LoadDataRow<T>)PersonToDataRow<T>().CreateDelegate(typeof(LoadDataRow<T>)); //foreach (var item in lst) //{ // var row = dt.NewRow(); // loadrow(row, item); // dt.Rows.Add(row); //} return(dt); }
/// <summary> /// 忽略特性的查找 /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> private static LoadDataTable <T> Find <T>() { LoadDataTable <T> load = null; object v = null; string name = typeof(T).FullName; if (cache.TryGetValue(name, out v)) { load = v as LoadDataTable <T>; } else { load = (LoadDataTable <T>)EntityToDataTableEmit <T>().CreateDelegate(typeof(LoadDataTable <T>)); cache[name] = load; } return(load); }