C# DataTable映射成Entity

using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Data; using System.Reflection; using System.Text; namespace TJCFinanceWriteOff.BizLogic.Common { public class DataTableUtil { /// <summary>
        /// 將DataRow轉換爲實體對象 /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dr"></param>
        /// <returns></returns>
        public static T ConvertToEntity<T>(DataRow dr) where T : new() { T entity = new T(); Type info = typeof(T); var properties = info.GetProperties(); string columnName = string.Empty; object propName = DBNull.Value; foreach (var prop in properties) { //1.判斷該屬性是否可寫
                if (!prop.CanWrite) { continue; } //2.查看實體類是否有數據庫相關特性,沒有則以屬性名做爲名稱
                var attributes = prop.GetCustomAttribute<ColumnAttribute>(); if (attributes is null) { columnName = prop.Name; } else { columnName = attributes.Name ?? prop.Name; } if (!dr.Table.Columns.Contains(columnName)) { continue; } propName = dr[columnName]; if (propName != DBNull.Value) { //根據ColumnName,將dr中的相對字段賦值給Entity屬性
                    prop.SetValue(entity, Convert.ChangeType(propName, prop.PropertyType), null); } } return entity; } /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static List<T> ToEntityList<T>(DataTable dt) where T : new() { List<T> list = new List<T>(dt.Rows.Count); foreach (DataRow dr in dt.Rows) { list.Add(ConvertToEntity<T>(dr)); } return list; } } }
相關文章
相關標籤/搜索