2021-05-12 14:32:11
C# DataTable與Model互轉的範例程式碼
2020-12-04 18:01:01
/// <summary> /// 實體轉換輔助類 /// </summary> public class ModelConvertHelper<T> where T : new() { /// <summary> /// List泛型轉換DataTable. /// </summary> public DataTable ListToDataTable<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> /// model轉換DataTable /// </summary> /// <typeparam name="T"></typeparam> /// <param name="items"></param> /// <returns></returns> public DataTable ModelToDataTable<T>(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); } var values = new object[props.Length]; for (int i = 0; i < props.Length; i++) { values[i] = props[i].GetValue(items, 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; } } /// <summary> /// DataTable轉換泛型List /// </summary> /// <param name="dt"></param> /// <returns></returns> public static List<T> DataTableToList(DataTable dt) { // 定義集合 List<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; } public static T DataTableToModel(DataTable dt) { // 定義實體 T t = new T(); // 獲得此模型的型別 Type type = typeof(T); string tempName = ""; foreach (DataRow dr in dt.Rows) { // 獲得此模型的公共屬性 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); } } break; } return t; } }
以上就是C#DataTable與Model互轉的範例程式碼的詳細內容,更多關於C#DataTable與Model互轉的資料請關注it145.com其它相關文章!
相關文章