C# DataTable與Model互轉的示例代碼
更新時間:2020年12月04日 14:20:47 作者:李志強
這篇文章主要介紹了C#DataTable與Model互轉的示例代碼,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
/// <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互轉的資料請關注腳本之家其它相關文章!
相關文章
C#實現目錄跳轉(TreeView和SplitContainer)的示例代碼
本文主要介紹了C#實現目錄跳轉(TreeView和SplitContainer)的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07