DataTable转换成List<Model>
来源:互联网 发布:传输层协议端口号 编辑:程序博客网 时间:2024/06/05 13:27
在开发的过程中,需要将DataTable转化为实体,这样的话可以通过属性直接点出来名称,减少dt[“Name”]出错的概率。
/// <summary>/// DataTable转成实体/// </summary>public static class Table2Model{ #region 公共方法(扩展DataTable) /// <summary> /// DataTable转换成T /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="table">需转换的数据table</param> /// <returns></returns> public static T ToModel<T>(this DataTable table) where T : new() { T entity = new T(); foreach (DataRow row in table.Rows) { foreach (var item in entity.GetType().GetProperties()) { if (row.Table.Columns.Contains(item.Name)) { if (DBNull.Value != row[item.Name]) { item.SetValue(entity, ChangeType(row[item.Name], item.PropertyType), null); } } } } return entity; } /// <summary> /// DataTable转换成T /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="table">需转换的数据table</param> /// <param name="ext">外延表重名需加的前缀</param> /// <returns></returns> public static T ToModel<T>(this DataTable table, string ext) where T : new() { T entity = new T(); foreach (DataRow row in table.Rows) { foreach (var item in entity.GetType().GetProperties()) { if (row.Table.Columns.Contains(ext + item.Name)) { if (DBNull.Value != row[ext + item.Name]) { item.SetValue(entity, ChangeType(row[ext + item.Name], item.PropertyType), null); } } } } return entity; } /// <summary> /// DataTable转换成List<T> /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="table">需转换的数据table</param> /// <returns></returns> public static List<T> ToModelList<T>(this DataTable table) where T : new() { List<T> entities = new List<T>(); foreach (DataRow row in table.Rows) { T entity = new T(); foreach (var item in entity.GetType().GetProperties()) { if (row.Table.Columns.Contains(item.Name)) { if (DBNull.Value != row[item.Name]) { item.SetValue(entity, ChangeType(row[item.Name], item.PropertyType), null); } } } entities.Add(entity); } return entities; } #endregion 公共方法(扩展DataTable) #region 私有方法(Convert.ChangeType处理Nullable<>和非Nullable<>) /// <summary> /// 类型转换(包含Nullable<>和非Nullable<>转换) /// </summary> /// <param name="value"></param> /// <param name="conversionType"></param> /// <returns></returns> private static object ChangeType(object value, Type conversionType) { // Note: This if block was taken from Convert.ChangeType as is, and is needed here since we're // checking properties on conversionType below. if (conversionType == null) { throw new ArgumentNullException("conversionType"); } // end if // If it's not a nullable type, just pass through the parameters to Convert.ChangeType if (conversionType.IsGenericType && conversionType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) { if (value == null) { return null; } // end if // It's a nullable type, and not null, so that means it can be converted to its underlying type, // so overwrite the passed-in conversion type with this underlying type System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(conversionType); conversionType = nullableConverter.UnderlyingType; } // end if // Now that we've guaranteed conversionType is something Convert.ChangeType can handle (i.e. not a // nullable type), pass the call on to Convert.ChangeType return Convert.ChangeType(value, conversionType); } #endregion 私有方法(Convert.ChangeType处理Nullable<>和非Nullable<>)}
0 0
- DataTable转换成List<Model>
- List转换成DataTable
- DataTable 转换成 List
- Datatable转换成 List
- Datatable转换成List
- DataTable转换为List<Model>的通用类
- DataTable转换为List<Model>的通用方法
- DataTable转换为List<Model>的通用类
- DataTable转换成List<T>
- 将datatable转换成list
- DataTable转换成List<T>
- 把list转换成 datatable
- DataTable转换成List<T>
- DataTable转换为Model
- datatable转换成list<T>,datatable转换成json格式
- 把List数据转换成DataTable
- 怎么把list转换成 datatable
- 【代码】DataTable转换成List<T>集合
- Python项目环境配置
- 查询中文/英文询盘id集合
- Git Final
- 使用VLC浏览器插件播放RTSP流
- Fourier Transform&Hilbert Transform&Related Function's MATLAB Simulation in Signal Processing
- DataTable转换成List<Model>
- 使用 RxJS 实现 JavaScript 的 Reactive 编程
- Android MVP 模式 项目初体验(一)
- 什么是数学交易?(量化交易)
- 操作系统五六章作业答案
- STMP3770内存映射(Memory map)小结
- 使用xshell连接linux,重启tomcat
- Android 设置textView 跑马灯自动滚动效果
- jsrender 绑定数据