//*********************************************************************************
//**********************************修改记录****************************************
//修 改 人:
//修改时间:
//修改备注:
//*********************************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Reflection; namespace BasePoint.Common
{
/// <summary>
/// 类 名:EntityHelper
/// 类 说 明:实体操作方法类
/// </summary>
public static class EntityHelper
{
/// <summary>
/// 方 法 名:DataRowToEntity
/// 方法说明:转化数据行到实体对象
/// </summary>
/// <typeparam name="T">实体类型</typeparam>
/// <param name="dr">数据行</param>
/// <param name="excludefields">不进行赋值的字段</param>
/// <returns>实体对象</returns>
public static T DataRowToEntity<T>(DataRow dr, string excludefields) where T : new()
{
Type t = typeof(T);
PropertyInfo[] pinfos = t.GetProperties();
T obj = new T();
foreach (PropertyInfo pi in pinfos)
{
if (!dr.Table.Columns.Contains(pi.Name))
continue;
if (!string.IsNullOrWhiteSpace(excludefields) && excludefields.Contains(pi.Name))
continue;
if (dr[pi.Name] != DBNull.Value)
pi.SetValue(obj, dr[pi.Name], null);
else
pi.SetValue(obj, null, null);
}
return obj;
}
/// <summary>
/// 方 法 名:DataRowToEntity
/// 方法说明:转化数据行到实体对象
/// </summary>
/// <typeparam name="T">实体类型</typeparam>
/// <param name="dr">The dr.</param>
/// <returns></returns>
public static T DataRowToEntity<T>(DataRow dr) where T : new()
{
return DataRowToEntity<T>(dr, string.Empty);
}
/// <summary>
/// 方 法 名:DataTableToEntityList
/// 方法说明:转化数据行到实体对象
/// </summary>
/// <typeparam name="T">实体类</typeparam>
/// <param name="dt">数据表</param>
/// <returns></returns>
public static List<T> DataTableToEntityList<T>(DataTable dt) where T : new()
{
return DataTableToEntityList<T>(dt,null);
} /// <summary>
/// 方 法 名:DataTableToEntityList
/// 方法说明:转化数据行到实体对象 /// <typeparam name="T">实体类</typeparam>
/// <param name="dt">数据表</param>
/// <param name="excludefields">不进行赋值的字段</param>
/// <returns></returns>
public static List<T> DataTableToEntityList<T>(DataTable dt,string excludefields) where T : new()
{
List<T> list = new List<T>();
if (dt != null)
{
foreach (DataRow dr in dt.Rows)
{
T t = DataRowToEntity<T>(dr,excludefields);
if (t != null)
list.Add(t);
}
}
return list;
}
/// <summary>
/// 复制实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <returns></returns>
public static T CopyEntity<T>(T source) where T : new()
{
Type t = typeof(T);
PropertyInfo[] pinfos = t.GetProperties();
T obj = new T();
foreach (PropertyInfo pi in pinfos)
{
object v = GetMemberValue(source,pi);
pi.SetValue(obj, v, null);
}
return obj;
}
/// <summary>
/// 判断两个实体是否一样
/// </summary>
/// <param name="source"></param>
/// <param name="dest"></param>
/// <returns></returns>
public static bool CheckEntityEquals(object source, object dest)
{
Type t = source.GetType();
PropertyInfo[] pinfos = t.GetProperties();
foreach (PropertyInfo pi in pinfos)
{
object v1 = GetMemberValue(dest, pi);
object v = GetMemberValue(source, pi);
if (!object.Equals(v1, v))
return false;
}
return true;
} /// <summary>
/// 方法说明:获取实体成员的值
/// </summary>
/// <param name="entity">实体</param>
/// <param name="member">实体成员信息</param>
/// <returns>实体成员的值</returns>
public static object GetMemberValue(object entity, MemberInfo member)
{
if ((entity == null) || (member == null))
{
return null;
} object value = null; switch (member.MemberType)
{
case MemberTypes.Field:
FieldInfo field = member as FieldInfo;
if (field != null)
{
value = field.GetValue(entity);
}
break;
case MemberTypes.Property:
PropertyInfo property = member as PropertyInfo;
if (property != null)
{
value = property.GetValue(entity, null);
}
break;
default:
break;
} return value;
}
/// <summary>
/// 方法说明:获取实体成员的值
/// </summary>
/// <param name="entity">实体</param>
/// <param name="memberName">实体成员名称</param>
/// <param name="ignoreCase">是否忽略大小写</param>
/// <returns>实体成员的值</returns>
public static object GetMemberValue(object entity, string memberName, bool ignoreCase)
{
if ((entity == null) || (string.IsNullOrEmpty(memberName)))
{
return null;
} MemberInfo[] members;
if (ignoreCase)
{
members = entity.GetType().GetMember(memberName, BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Instance);
}
else
{
members = entity.GetType().GetMember(memberName);
} if ((members == null) || (members.Length == ))
{
return null;
} return GetMemberValue(entity, members[]);
} public static void SetMemberValue(object entity, string memberName, object memberValue)
{
if ((entity == null) || (string.IsNullOrEmpty(memberName)))
{
return;
} MemberInfo[] members;
members = entity.GetType().GetMember(memberName, BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Instance);
if ((members == null) || (members.Length == ))
{
return;
}
if (members[] is FieldInfo)
{
if (memberValue == DBNull.Value)
(members[] as FieldInfo).SetValue(entity, null);
else
(members[] as FieldInfo).SetValue(entity, memberValue);
}
else if (members[] is PropertyInfo)
{
if (memberValue == DBNull.Value)
(members[] as PropertyInfo).SetValue(entity, null, null);
else
(members[] as PropertyInfo).SetValue(entity, memberValue,null);
}
}
}
}

C# 对象操作的更多相关文章

  1. 前端学PHP之面向对象系列第五篇——对象操作

    × 目录 [1]对象克隆 [2]对象比较[3]对象串行化[4]json 前面的话 本文主要介绍面向对象中的一些对象操作 对象克隆 对象复制,又叫对象克隆,可以通过 clone 关键字来完成 在多数情况 ...

  2. 原生JS中常用的Window和DOM对象操作汇总

    一.常用的Window对象操作 Window对象中又包含了document.history.location.Navigator和screen几个对象,每个对象又有自己的属性方法,这里window可以 ...

  3. DOM、Window对象操作

    一.DOM的基本概念 DOM是文档对象模型,这种模型为树模型:文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西. 一.基本语法: 数据类型(字符串,小数,整数,布尔,时间) var, v ...

  4. XML转换为对象操作类详解

    //XML转换为对象操作类 //一,XML与Object转换类 using System.IO; using System.Runtime.Serialization.Formatters.Binar ...

  5. Javascript 笔记与总结(2-3)Javascript 运算符、控制结构与对象操作

    [连接运算符 + ] <script> console.log(1+2+'a'+3+4); </script> 输出: 3a34 [逻辑运算符]返回的是最早能判断表达式结果的那 ...

  6. POI Workbook接口和HSSFWorkbook对象和XSSFWorkbook对象操作相应excel版本

    由于HSSFWorkbook只能操作excel2003一下版本,XSSFWorkbook只能操作excel2007以上版本,所以利用Workbook接口创建对应的对象操作excel来处理兼容性 @Te ...

  7. Python的对象操作(一)

    python支持对象和函数   1. python是解释型语言,逐行运行 2. 对象调用 例子:删除文件的一个例子 2.1 先定义一个类 class MyApp: 2.2 import 引用要用到的模 ...

  8. c# 数据库编程(利用DataSet 和 DataAdaper对象操作数据库--单表操作)

    一.概述 前面2篇文章,介绍了使用SqlCommand对象利用sql命令来操作数据库. 这篇文章我们来介绍使用c#的DataSet 和 DataAdaper对象操作操作数据库. 先来介绍下这两个对象是 ...

  9. jQuery(九)、ajax对象操作

    1 数组和对象操作 1.jQuery.extend([deep,] target, object1, [objectN]) 用一个或多个其他对象来扩展一个对象,返回被扩展的对象. 如果不指定targe ...

  10. ES6常用对象操作

    ES6常用对象操作 一. const 简单类型数据常量 // const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动.对于简单类型的数据(数值.字符串.布尔值),值就保存在 ...

随机推荐

  1. pygal and matplotlib(again)

    之前项目有用过pygal做chart图, 写代码很容易,几行代码就很做出一个看上去还不错的chart, 缺点是: 要调的再美观很难, Web上的交互效果较差. 在web上做可视化还是推荐采用Echar ...

  2. python4delphi 使用

    Python 开发桌面程序, 之前写过一个使用IronPython的博客. 下面这个方案使用 delphi 作为主开发语言,通过 python4delphi 控件包将 python 作为 script ...

  3. Shader 之 顶点变形

    可以使3D物体通过顶点变形弯曲,常见于跑酷游戏的跑道.可向左.右.上.下弯曲. Shader "Custom/VertexColorCurved" { Properties { / ...

  4. 利用PHP读取文件

    $fp=fopen("D:\\phpStudy\\www\\date\\file\\2.txt","r");if($fp){    while(!feof($f ...

  5. PHPCMS V9多站点[站群功能]动态设置与静态设置子站内容URL

    今天我们来讲解下 PHPCMS V9的站群功能的 动态站点与静态站点的配置 站群站点,分为动态站点,和静态站点两种设置方法: 静态的,就是将栏目和内容都了HTML 文件,我们先讲解下,站群的操作: 建 ...

  6. expert C Programing notes

    1.寻常算术转换 在运算中 如果其中一个操作数是long double 则另一个转为long double,其次 如果有一个为double 则另一个转为double,再次 float . unsign ...

  7. oracle asm 概念

    automated storage management ,即自动存储管理,简称asm .. 在oracle 10g 这个版本之前,管理一个大型数据库成千上万的数据文件对数据库管理员来说是一个既无技术 ...

  8. mybaitis uuid插入和定义返回类型

  9. [POJ3096]Surprising Strings

    [POJ3096]Surprising Strings 试题描述 The D-pairs of a string of letters are the ordered pairs of letters ...

  10. 跟着百度学PHP[4]OOP面对对象编程-6-构造方法(__construct)和构析方法(__destruct)

    函数就是成员方法(方法有三:构造方法.成员方法.析构方法) 下面是两种方法. 构造方法和构析方法 00x1 构造方法 构造方法会在创建对象之后自动调用.其名称为__construct <?php ...