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;
}
}
}

C# DataTable映射成Entity的更多相关文章

  1. C#:DataTable映射成Model

    这是数据库开发中经常遇到的问题,当然,这可以用现成的ORM框架来解决,但有些时候,如果DataSet/DataTable是第三方接口返回的,ORM就不方便了,还得自己处理. 反射自然必不可少的,另外考 ...

  2. DataTable转换成匿名类的List类型

    DataTable转换成匿名类的List类型   因为匿名类是不能够 Activator.CreateInstance进行反射实例化的 /// <summary> /// 匿名类的转换方式 ...

  3. DataTable 转换成 Json的3种方法

    在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...

  4. DataTable转换成IList<T>的简单实现

    DataTable的无奈 很多时候,我们需要去操作DataTable.但DataTable的操作,实在是太不方便了.Linq?lambda表达式?统统没有... 特别是对现有结果集做进一步筛选,这样的 ...

  5. asp.net dataTable转换成Json格式

    /// <summary> /// dataTable转换成Json格式 /// </summary> /// <param name="dt"> ...

  6. 将DataTable转换成CSV文件

    DataTable用于在.net项目中,用于缓存数据,DataTable表示内存中数据的一个表.CSV文件最早用在简单的数据库里,由于其格式简单,并具备很强的开放性,所以起初被扫图家用作自己图集的标记 ...

  7. 将DataSet(DataTable)转换成JSON格式(生成JS文件存储)

    public static string CreateJsonParameters(DataTable dt) { /**/ /**/ /**/ /* /*********************** ...

  8. C#将DataTable转换成list的方法

    本文实例讲述了C#将DataTable转换成list及数据分页的方法.分享给大家供大家参考.具体如下: /// <summary>   /// 酒店评论列表-分页  /// </su ...

  9. DataTable转换成List<T>

    很多时候需要将DataTable转换成一组model,直接对model执行操作会更加方便直观. 代码如下: public static class DataTableToModel { public ...

随机推荐

  1. JavaScript中常见数据结构

    数据结构 栈:一种遵从先进后出 (LIFO) 原则的有序集合:新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端为栈底.在栈里,新元素都靠近栈顶,旧元素都接近栈底. 队列:与上相反,一种遵循先进 ...

  2. 一个XP SP3调用0地址蓝屏BUG

    0x00 蓝屏的堆栈 在XP SP3上跑POC之后,一段时间之后会出现蓝屏,蓝屏的堆栈如下,可以看出是ACKData里面CALL了一个0指针导致的蓝屏 0x01 蓝屏原因 1 ETW(Event Tr ...

  3. python定时任务实现

    安装 pip install schedule 示例代码 import schedule import time def job(): print("I'm working..." ...

  4. java实现磁盘先来先服务算法

    package demo; import java.awt.List; import java.util.ArrayList; import java.util.Arrays; public clas ...

  5. 【Python】对我自己的博客进行统计,看看哪年哪月发帖量最大

    代码很简单,主要利用了requests进行网络访问,beautifulSoup进行页面文本分析,re进行正则表达式抽取文字,前面两个需要pip install name去安装,后者是内部对象所以不用安 ...

  6. [go]template使用

    //index.html {{if gt .Age 18}} <p>hello, old man, {{.Name}}</p> {{else}} <p>hello, ...

  7. Container 布局容器

    Container 布局容器 用于布局的容器组件,方便快速搭建页面的基本结构: <el-container>:外层容器.当子元素中包含 <el-header> 或 <el ...

  8. ROS 常用命令

    1.查看网卡接口: /interface  print 2.给网口添加IP地址: /ip address add address=192.168.1.254/24 interface=ether1 3 ...

  9. Spring Security(2):过滤器链(filter chain)的介绍

    上一节中,主要讲了Spring Security认证和授权的核心组件及核心方法.但是,什么时候调用这些方法呢?答案就是Filter和AOP.Spring Security在我们进行用户认证以及授予权限 ...

  10. 解决Unity3d 图片黑边问题

    突然发现UI有黑边,在Photoshop里面没发现问题. 最后在图集的属性中去掉Minimap选项就可以了.