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. VS2010调试时,对于一些语句不能单步运行也不能对变量添加监视的问题

    在以mfc建立的工程中,需要建立一个链表来保存一些数据.但是在创建结构体,以及对其赋值的过程中,发现对结构体变量不能观察,添加到监视器中的变量也出现变量名不存在的错误. 首先,在文件的开始定义一个结构 ...

  2. CF1153E Serval and Snake【构造】

    题目链接:洛谷 这道题是很久以前NTF跟我说的,现在想起来把它做了... 我们发现,如果蛇的两头都在矩形里或矩形外,则询问为偶数,否则为奇数. 所以我们询问每一行和每一列,就能知道蛇的两头的横纵坐标了 ...

  3. 为一台全新的电脑构建JavaEE开发环境

    1.开发以外的常用软件 2.下载各种资源(x64,2017年8月)JDKhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-dow ...

  4. 前端逼死强迫症系列之css

    一.编写css样式 1.ID选择器 由于ID唯一,所以也是写多遍. <head> <style> #i1{ background-color: #2459a2; height: ...

  5. k8s之yaml详解

    k8s之yaml详解 apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 metadata: #资源的元数 ...

  6. Airbnb新用户的民宿预定结果预测

    1. 背景 关于这个数据集,在这个挑战中,您将获得一个用户列表以及他们的人口统计数据.web会话记录和一些汇总统计信息.您被要求预测新用户的第一个预订目的地将是哪个国家.这个数据集中的所有用户都来自美 ...

  7. python核心模块方法

    ********************os模块: os.remove() 删除文件 os.unlink() 删除文件 os.rename() 重命名文件 os.listdir() 列出指定目录下所有 ...

  8. C#与C++数据类型比较及结构体转换(搜集整理二)

    原文网址:http://www.blogjava.net/heting/archive/2010/03/20/315998.html C++ C# ========================== ...

  9. eclipse、MyEclipse 修改字符集和JDK

    eclipse 中UTF-8设置 1.windows->Preferences   打开"首选项"对话框: 2.然后,general->Workspace,右 侧Tex ...

  10. 电力项目十一--js添加浮动框

    1.添加浮动窗口样式 <!-- 浮动窗口样式css begin --> <style type="text/css"> #msg_win{border:1p ...