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;
        }
    }
}
复制代码

 

作者:奇

出处:https://www.cnblogs.com/fanqisoft/p/11671428.html

版权:本作品采用「本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。」许可协议进行许可。

posted @   SpringCore  阅读(972)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示