首页 > 代码库 > datatable转换为list<model> 映射
datatable转换为list<model> 映射
using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Reflection;using System.Text;namespace PORM.Data{ /// <summary> /// 常用映射关系帮助类 /// </summary> public class CommonMap { /// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dReader"></param> /// <returns></returns> public static IEnumerable<T> MapToIEnumerable<T>(IDataReader dReader) where T : class { using (dReader) { List<string> drFields = new List<string>(dReader.FieldCount); for (int i = 0; i < dReader.FieldCount; i++) { drFields.Add(dReader.GetName(i).ToLower()); } while (dReader.Read()) { T model = Activator.CreateInstance<T>(); foreach (PropertyInfo pi in model.GetType().GetProperties(BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance)) { if (drFields.Contains(pi.Name.ToLower())) { if (pi.PropertyType.IsEnum) { object enumName = Enum.ToObject(pi.PropertyType, pi.GetValue(model, null)); pi.SetValue(model, enumName, null); } else { if (!IsNullOrEmptyOrDBNull(dReader[pi.Name])) { pi.SetValue(model, MapNullableType(dReader[pi.Name], pi.PropertyType), null); } } } } yield return model; } } } /// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="table"></param> /// <returns></returns> public static IEnumerable<T> MapToIEnumerable<T>(DataTable table) where T : class { foreach (DataRow row in table.Rows) { yield return MapToModel<T>(row); } } /// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dReader"></param> /// <returns></returns> public static T MapToModel<T>(IDataReader dReader) where T : class { using (dReader) { if (dReader.Read()) { List<string> drFields = new List<string>(dReader.FieldCount); for (int i = 0; i < dReader.FieldCount; i++) { drFields.Add(dReader.GetName(i).ToLower()); } T model = Activator.CreateInstance<T>(); foreach (PropertyInfo pi in model.GetType().GetProperties(BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance)) { if (drFields.Contains(pi.Name.ToLower())) { if (pi.PropertyType.IsEnum) { object enumName = Enum.ToObject(pi.PropertyType, pi.GetValue(model, null)); pi.SetValue(model, enumName, null); } else { if (!IsNullOrEmptyOrDBNull(dReader[pi.Name])) { pi.SetValue(model, MapNullableType(dReader[pi.Name], pi.PropertyType), null); } } } } return model; } } return default(T); } /// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dRow"></param> /// <returns></returns> public static T MapToModel<T>(DataRow dRow) where T : class { try { List<string> drItems = new List<string>(dRow.ItemArray.Length); for (int i = 0; i < dRow.ItemArray.Length; i++) { drItems.Add(dRow.Table.Columns[i].ColumnName.ToLower()); } T model = Activator.CreateInstance<T>(); foreach (PropertyInfo pi in model.GetType().GetProperties(BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance)) { if (drItems.Contains(pi.Name.ToLower())) { if (pi.PropertyType.IsEnum) //属性类型是否表示枚举 { object enumName = Enum.ToObject(pi.PropertyType, pi.GetValue(model, null)); pi.SetValue(model, enumName, null); //获取枚举值,设置属性值 } else { if (!IsNullOrEmptyOrDBNull(dRow[pi.Name])) { pi.SetValue(model, MapNullableType(dRow[pi.Name], pi.PropertyType), null); } } } } return model; } catch (Exception ex) { throw ex; } } /// <summary> /// /// </summary> /// <param name="value"></param> /// <param name="mType"></param> /// <returns></returns> public static object MapNullableType(object value, Type mType) { if (mType.IsGenericType && mType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) { if (IsNullOrEmptyOrDBNull(value)) return null; System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(mType); mType = nullableConverter.UnderlyingType; } if (mType == typeof(bool) || mType == typeof(Boolean)) { if (value is string) { if (value.ToString() == "1") return true; else return false; } } if (mType.IsEnum) //属性类型是否表示枚举 { int intvalue; if (int.TryParse(value.ToString(), out intvalue)) return Enum.ToObject(mType, Convert.ToInt32(value)); else return System.Enum.Parse(mType, value.ToString(), false); } return Convert.ChangeType(value, mType); } /// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="value"></param> /// <returns></returns> public static T MapType<T>(object value) { Type type = typeof(T); if (CommonMap.IsNullOrEmptyOrDBNull(value)) value = http://www.mamicode.com/type.IsValueType ? Activator.CreateInstance(type) : null;"obj"></param> /// <returns></returns> public static bool IsNullOrEmptyOrDBNull(object obj) { return ((obj is DBNull) || obj == null || string.IsNullOrEmpty(obj.ToString())) ? true : false; } }}
List<UnCompareDrug> t = CommonMap.MapToIEnumerable<UnCompareDrug>(dt).ToList();
datatable转换为list<model>
datatable转换为list<model> 映射
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。