//*********************************************************************************
//**********************************修改记录****************************************
//修 改 人:
//修改时间:
//修改备注:
//*********************************************************************************
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. webpack构建与loaders

    loaders 定义 先了解一下webpack,webpack是一个用于针对js文件的构建工具,在被构建的js文件中,我们可以使用require语句和webpack loader,如下: var cs ...

  2. Slave_SQL_Running: No mysql同步故障解决方法

    Slave_SQL_Running: No mysql同步故障解决      今天检查数据库发现一台MySQL Slave未和主机同步,查看Slave状态:mysql> show slave s ...

  3. [译]git log

    git log git log命令用来显示提交的快照. 能列出来你项目的历史, 能过滤和搜索你指定的一些修改. git status能让你检查工作目录和stage区的状态, git log只提供被co ...

  4. 面试集锦-常量,const, const 对指针的影响

    在C语言中不可改变的数据(量)就是常量    在C语言中有三种常量        字面量(直接量),就是直接写出来的,从写法上就可以看出值与类型等,例如:19,123.456等        名字常量 ...

  5. Windows Phone自带的语音识别

    WindowsPhone下语音操作包括: 1.程序内部的语音识别,用户可以通过语音识别进行输入或完成相关任务 2.控制程序的语音命令,控制程序启动.打开,并可对页面跳转等进行操作 这篇文章将构建一个简 ...

  6. jekyll 安装过程

    如果有, linux以源码包方式发布, 方便,快捷, 容易出错,安装内容难找到,版本容易冲突.兼容性会出错.如何解决这种方式:1.上网查找答案,你遇到的别人也有,关键词匹配到,好像没有别的办法解决了, ...

  7. 如何使用java自定义注解?demo

    1.Description.java package kzfy.bk.com; import java.lang.annotation.Documented; import java.lang.ann ...

  8. HDU 5120 A Curious Matt(2014北京赛区现场赛A题 简单模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5112 解题报告:扫一遍 #include<cstdio> #include<cstr ...

  9. OpenCV进阶之路:神经网络识别车牌字符

    1. 关于OpenCV进阶之路 前段时间写过一些关于OpenCV基础知识方面的系列文章,主要内容是面向OpenCV初学者,介绍OpenCV中一些常用的函数的接口和调用方法,相关的内容在OpenCV的手 ...

  10. 读书笔记-JVM

    局部变量表(虚拟机栈中的一部分)在编译期完成分配,运行期不会再改变大小: 每个方法对应一个栈帧(存储局部变量表.操作数栈.动态链接.方法出口等),栈帧被存储到虚拟机栈中,每个线程对应一个虚拟机栈,方法 ...