AutoMapper可以很方便的将一个实体的属性值转化给另一个对象。这个功能在我们日常的编码中经常会遇到。我将AutoMapper的一些基本映射功能做成扩展方法,在编码中更方便使用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AutoMapper;
using System.Collections;
using System.Data;
using System.Reflection; namespace NFMES.Core.Type
{
public static class AutoMapperExtension
{
/// <summary>
/// 实体对象转换
/// </summary>
/// <typeparam name="TDestination"></typeparam>
/// <param name="o"></param>
/// <returns></returns>
public static TDestination MapTo<TDestination>(this object o)
{
if (o == null)
throw new ArgumentNullException(); Mapper.CreateMap(o.GetType(), typeof(TDestination)); return Mapper.Map<TDestination>(o); ;
} /// <summary>
/// 集合转换
/// </summary>
/// <typeparam name="TDestination"></typeparam>
/// <param name="o"></param>
/// <returns></returns>
public static List<TDestination> MapTo<TDestination>(this IEnumerable o)
{
if (o == null)
throw new ArgumentNullException(); foreach (var item in o)
{
Mapper.CreateMap(item.GetType(), typeof(TDestination)); break;
}
return Mapper.Map<List<TDestination>>(o);
} /// <summary>  
/// 将 DataTable 转为实体对象  
/// </summary>  
/// <typeparam name="T"></typeparam>  
/// <param name="dt"></param>  
/// <returns></returns>  
public static List<T> MapTo<T>(this DataTable dt)
{
if (dt == null || dt.Rows.Count == )
return default(List<T>); Mapper.CreateMap<IDataReader, T>();
return Mapper.Map<List<T>>(dt.CreateDataReader());
} /// <summary>
/// 将List转换为Datatable
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <returns></returns>
public static DataTable MapToTable<T>(this IEnumerable list)
{
if (list == null)
return default(DataTable); //创建属性的集合
List<PropertyInfo> pList = new List<PropertyInfo>();
//获得反射的入口
System.Type type = typeof(T);
DataTable dt = new DataTable();
//把所有的public属性加入到集合 并添加DataTable的列
Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, p.PropertyType); });
foreach (var item in list)
{
//创建一个DataRow实例
DataRow row = dt.NewRow();
//给row 赋值
pList.ForEach(p => row[p.Name] = p.GetValue(item, null));
//加入到DataTable
dt.Rows.Add(row);
}
return dt;
} }
}

这个静态类中有4个扩展方法,分别对Object类型,IEnumberable类型,DataTable类型添加了MapTo方法,可以方便的将对象映射到对象,集合映射到集合,表映射到集合,集合映射到表(这个功能AutoMapper不支持,我用反射实现的)

单实体转化使用方式:

集合转化的使用方式:

AutoMapper还有很多功能,我这个类只扩展了一些最基本和常用的功能,以后用到会继续添加。

C# AutoMapper的简单扩展的更多相关文章

  1. 对bootstrap modal的简单扩展封装

    对bootstrap modal的简单扩展封装 参考自:http://www.muzilei.com/archives/677   注:原文不支持bootstrap新版本,并且居中等存在问题 此段时间 ...

  2. Log4net创建日志及简单扩展

    转:http://blog.csdn.net/CHENFEIYANG2009/article/details/5397342 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log ...

  3. AutoMapper 6.x 扩展

    简介 很多时候我们使用AutoMapper的时候,都需要进行一个配置才可以使用Mapper.Map<Source,Target>(entity);.如果不进行配置则会报错. 如果实体过多, ...

  4. 使用Log4net创建日志及简单扩展

    如何使用Log4net创建日志及简单扩展 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的 ...

  5. OOM AutoMapper的简单实用

    OOM  AutoMapper的简单实用 一.前言: OOM顾名思义,Object-Object-Mapping实体间相互转换,AutoMapper也是个老生常谈了,其意义在于帮助你无需手动的转换简单 ...

  6. AutoMapper的简单使用

    接触AutoMapper已经有两年多的时间了,在ORM框架中,它使持久层对象与DTO对象之间的转换变得相当简单. 随着负责的项目的增多,使用的技术框架一多起来,很多具体的技术点难免记不清, 加上同时兼 ...

  7. automapper的简单用法

    AutoMapper对象转换方面(Object-Object Mapping)对象映射工具,实现对象和对象之间的转化.主要应用在项目的dto,model,entity或viewmodel之间转换,其实 ...

  8. AutoMapper 6.x 扩展方法

    简介 很多时候我们使用AutoMapper的时候,都需要进行一个配置才可以使用Mapper.Map<Source,Target>(entity);.如果不进行配置则会报错. 如果实体过多, ...

  9. 由一道面试题简单扩展 — setTimeout、闭包

    在一个前端公众号,看到这么一个号称简单的面试题: 1.以下程序输出什么? <script type="text/javascript"> function init() ...

随机推荐

  1. Tomcat中部署网站和绑定域名

    在安装的tomcat的文件夹下有个conf文件夹 下面有个server.xml文件, 1. 使用80端口 默认tomcat用的是8080端口. <Connector port="808 ...

  2. Bootstrap的介绍和响应式媒体查询

    Bootstrap的介绍 凡是使用过Bootstrap的开发者,都不在乎做这么两件事情:复制and粘贴.哈哈~,是的使用Bootstrap非常简单,但是在复制粘贴之前,需要先对Bootstrap的用法 ...

  3. ggplot2 texts : Add text annotations to a graph in R software

    http://www.sthda.com/english/wiki/ggplot2-texts-add-text-annotations-to-a-graph-in-r-software Instal ...

  4. Python实践练习:疯狂填词

    题目 创建一个疯狂填词(Mad Libs)程序,它将读入文本文件,并让用户在该文本文件中出现 ADJECTIVE.NOUN.ADVERB 或 VERB 等单词的地方,加上他们自己的文本. 例如,一个文 ...

  5. python 2.7中安装mysql

    在python中进行安装mysql模块,但是怎么都不能导入mysql模块,出错如下所示: [root@python ~]# python Python 2.7.11 (default, Apr 5 2 ...

  6. cas 退出后跳转指定页面

    退出连接 https://localhost:8888/cas/logout?service=https://localhost:8080/cas-client/login 修改cas-server配 ...

  7. Create a Basic Shader in Shader Forge

    [Create a Basic Shader in Shader Forge] 1.打开ShaderForge.Window-> Shader Forge.(打开速度较慢) 2.通过NewSha ...

  8. mapreduce of hadoop

    [mapreduce of hadoop] 1. MapReduce作业(Job)是客户端想要执行的一个作单元, 它包括: 输入数据, MapReduce程序, 配置信息. 2. Hadoop将作业成 ...

  9. 数据库 alert.log 日志中出现 "[Oracle][ODBC SQL Server Wire Protocol driver][SQL Server] 'RECOVER'"报错信息

    现象描述: (1).数据库通过调用透明网络实现分布式事务,但透明网关停用后,失败的分布式事务并未清理. (2).数据库 alert 日志 Thu Sep 06 06:53:00 2018 Errors ...

  10. Android APK反编译详解(转)

    转自:http://blog.csdn.net/ithomer/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代 ...