04.AutoMapper 之投影(Projection)
https://www.jianshu.com/p/031553705417
投影(Projection)
投影将源转换为目标而不是扁平化对象模型。如果没有额为的配置AutoMapper需要一个扁平化的目标来匹配源类型的命名结构。当你想将源值投影到一个与源结构不完全匹配的目标中,必须指定自定义的成员映射定义。例如,我们可能想要转换此源结构:
public class CalendarEvent
{
public DateTime Date { get; set; }
public string Title { get; set; }
}
接受网页上的输入表单的对象:
public class CalendarEventForm
{
public DateTime EventDate { get; set; }
public int EventHour { get; set; }
public int EventMinute { get; set; }
public string Title { get; set; }
}
因为目标属性的名称与源属性不完全匹配(CalendarEvent.Date需要是CalendarEventForm.EventDate),所以我们需要在类型映射配置中指定自定义成员映射:
// 模型
var calendarEvent = new CalendarEvent
{
Date = new DateTime(2008, 12, 15, 20, 30, 0),
Title = "Company Holiday Party"
};
// 配置 AutoMapper
Mapper.Initialize(cfg =>
cfg.CreateMap<CalendarEvent, CalendarEventForm>()
.ForMember(dest => dest.EventDate, opt => opt.MapFrom(src => src.Date.Date))
.ForMember(dest => dest.EventHour, opt => opt.MapFrom(src => src.Date.Hour))
.ForMember(dest => dest.EventMinute, opt => opt.MapFrom(src => src.Date.Minute)));
// 执行映射
CalendarEventForm form = Mapper.Map<CalendarEvent, CalendarEventForm>(calendarEvent);
form.EventDate.ShouldEqual(new DateTime(2008, 12, 15));
form.EventHour.ShouldEqual(20);
form.EventMinute.ShouldEqual(30);
form.Title.ShouldEqual("Company Holiday Party");
每个自定义成员配置都使用一个委托动作来单独配置。 在上面的示例中,我们使用MapFrom来执行自定义源到目标成员的映射。 MapFrom方法使用lambda表达式作为参数,在映射期间对lambda表达式进行求值后赋值给目标成员。 MapFrom表达式可以是任何Func <TSource,object>的 lambda表达式。
04.AutoMapper 之投影(Projection)的更多相关文章
- AutoMapper之投影
7.投影 AutoMapper有一种自定义映射,叫投影.接下来我们通过一个示例来了解它 7.1示例 //源对象 public class CalendarEvent { public DateTime ...
- shadow projection
1.概述 shadow projection,又可成为planar shadow, 这是一种非常简单的绘制阴影的方法. 主要应用的应用场景:物体在平面投射阴影. 主要思想:把阴影看作是物体在平面上的投 ...
- MongoDB Projection
版权所有,未经许可,禁止转载 章节 MongoDB 入门 MongoDB 优势 MongoDB 安装 MongoDB 数据建模 MongoDB 创建数据库 MongoDB 删除数据库 MongoDB ...
- Google earth engine 中的投影、重采样、尺度
本文主要翻译自下述GEE官方帮助 https://developers.google.com/earth-engine/guides/scale https://developers.google.c ...
- SQLSERVER中的假脱机spool
SQLSERVER中的假脱机spool 我发现网上对于假脱机的解释都非常零散,究竟假脱机是什么? 这几天在家里研究了一下,收集了很多网上的资料 假脱机是中文的翻译,而英文的名字叫做 spool 在徐老 ...
- 027 hibernate查询语言(HQL)
概述:数据查询与检索是Hibernate中的一个亮点,相对其他ORM实现而言,Hibernate提供了灵活多样的查询机制. 标准化对象查询(Criteria Query):以对象的方式进行查询,将查询 ...
- Apache-Flink深度解析-SQL概览
你可能感兴趣的文章: Flink入门 Flink DataSet&DataSteam API Flink集群部署 Flink重启策略 Flink分布式缓存 Flink重启策略 Flink中的T ...
- Apache-Flink深度解析-TableAPI
您可能感兴趣的文章合集: Flink入门 Flink DataSet&DataSteam API Flink集群部署 Flink重启策略 Flink分布式缓存 Flink重启策略 Flink中 ...
- HBase与列存储
传统的行存储和(HBase)列存储的区别 1.为什么要按列存储 列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的 ...
随机推荐
- HDU2433—Travel (BFS,最短路)
Travel Time Limit: 10000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- [CSP-S模拟测试]:多维网格(组合数学+容斥)
题目传送门(内部题138) 输入格式 输入数据第一行为两个整数$d,n$. 第二行$d$个非负整数$a_1,a_2,...,a_d$. 接下来$n$行,每行$d$个整数,表示一个坏点的坐标.数 ...
- RedisTemplate集合使用说明-opsForList(二)
1.leftPush(K key, V value) 在变量左边添加元素值. Java代码 redisTemplate.opsForList().leftPush("list" ...
- 高性能JavaScript之加载和执行
JS在浏览器中的性能,可以认为是开发者所面临的最重要的可行性问题.这个问题因JS的阻塞特性变得复杂,也就是说当浏览器在执行JS代码时,不能同时做其他任何事情.事实上,大多数浏览器都使用单一进程来处理U ...
- Oracle三种分页?
①select * from (select employee.*, rownum r from employee) where r between 2 and 5; ②select * from ( ...
- C++入门经典-例4.4-循环嵌套之求n的阶乘
1:代码如下: // 4.4.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
- Docker入门-介绍和安装
Docker容器 Docker是什么 Docker最初是dotCloud公司创建人Solomon Hykes在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并于 ...
- MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
1. 摘要 作者提出了一系列应用于移动和嵌入式视觉的称之为 MobileNets 的高效模型,这些模型采用深度可分离卷积来构建轻量级网络. 作者还引入了两个简单的全局超参数来有效地权衡时延和准确率,以 ...
- go-ethereum开发问题
1. abigen 参考文档(Native DApps: Go bindings to Ethereum contracts) abigen --sol token.sol --pkg token - ...
- apache访问日志
#错误日志ErrorLog "logs/dummy-host2.example.com-error_log" #访问日志CustomLog "logs/dummy-hos ...