automapper如何全局配置map条件过滤null值空值对所有映射起效
原文 automapper如何全局配置map条件过滤null值空值对所有映射起效
我们在使用automapper的时候经常会遇到这样的问题:假设展示给用户的数据我们用UserDto类,User类就是我们的实体类。在给用户编辑的时候,我们可能某些字段在数据库中为Null,这时候需要一些默认值 比如这里UserDto中的BirTime,然后我们有一些人的习惯是在构造函数里面进行赋值
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime? BirTime{ get; set; }
}
public class UserDto
{
public UserDto()
{
this.BirTime=DateTime.Now;//把当前时间赋值给BirTime
}
public string Name { get; set; }
public DateTime? BirTime{ get; set; }
}
//假设我们从数据库中取出来的值是这样的,然后我们要和UserDto之间进行转换
User user = new User()
{
Id = 1,
Name = "caoyc",
BirTime=null
};
UserDto userDto=user.MapTo<UserDto>();//这里把实体类转换成前台给用户展示的UserDto类
看似这里的代码都没有什么问题,但是我想在BirTime为null值的时候使用我UserDto类中的默认值 也就是当前时间,但在实际操作之后就会发现转换过后的UserDto的值已经变掉了。那么问题来了, 如何才能使用默认值呢。
方法有很多,比如
//第一种方法
UserDto userDto=user.MapTo<UserDto>();//这里把实体类转换成前台给用户展示的UserDto类
userDto.BirTime=userDto.BirTime==null?DateTime.Now:userDto.BirTime;
第一种方法就是在自己转换完成之后判断一下,然后重新赋值,用这种方法的话那写构造函数自然就没什么必要了
//第二种方法
Mapper.CreateMap<User, UserDto>().ForAllMembers(opt => opt.Condition(srs => !srs.IsSourceValueNull));
第二种方法不怎么好,当你需要转换的类很多的时候,每个都要这样写,会很多也会很烦
//第三种方法,在全局配置的时候加上这句话
private static void CreateMappingsInternal(IMapperConfigurationExpression cfg)
{
//没错就是这句话
cfg.ForAllMaps((a, b) => b.ForAllMembers(opt => opt.Condition((src, dest, sourceMember) => sourceMember != null)));
}
个人比较推荐第三种方法,不过这就相当于一棒子打死了,有利也有弊。
作者:邵佳楠
链接:https://www.jianshu.com/p/c691a20adf2b
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
automapper如何全局配置map条件过滤null值空值对所有映射起效的更多相关文章
- jackson 转json. 过滤null值
@Test public void tttttt() throws JsonGenerationException, JsonMappingException, IOException { Objec ...
- hive对有null值的列进行avg,sum,count等操作时会不会过滤null值
在hive中,我们经常会遇到对某列进行count.sum.avg等操作计算记录数.求和.求平均值等,但这列经常会出现有null值的情况,那这些操作会不会过滤掉null能呢? 下面我们简单测试下: wi ...
- JSON序列化自己主动过滤NULL值
使用Newtonsoft.Json.dll 序列化为json时主动将NULL值过滤掉.详细做法: var jSetting = new JsonSerializerSettings {NullValu ...
- SqlServer中的Null值空值问题
sql使用的是三值谓词逻辑,所以逻辑表达式返回的结果可以为True.False或者未知,在三值逻辑中返回True与不返回False并不完全一样, SQL对查询过滤条件的处理:接受TURE 拒绝FAL ...
- MyBatis 返回类型resultType为map时的null值不返回问题
问题一: 查询结果集中 某字段 的值为null,在map中不包含该字段的key-value对 解决:在mybatis.xml中添加setting参数 <!-- 在null时也调用 sett ...
- 直接使用提交过来的类来更新字段EntityState.Modified并过滤null值的方法
public T Update<T>(T entity) where T : ModelBase { var set = this.Set<T>(); set.Attach(e ...
- spark-sql集合的“条件过滤”,“合并”,“动态类型映射DataFrame”,“存储”
List<String> basicList = new ArrayList<String>(); basicList.add("{\"name\" ...
- spring配置jackson不返回null值
#json不返回null spring.jackson.default-property-inclusion=non_null
- mybatis全局配置mybatis-config.xml
大部分时候,我们都是在Spring 里面去集成MyBatis.因为Spring 对MyBatis 的一些操作进行的封装,我们不能直接看到它的本质,所以先看下不使用容器的时候,也就是编程的方式,MyBa ...
随机推荐
- 如何使stm32程序更好移植, 结构体相当于define
原创:转载请标注引用地址 如何定义 led1对应于PA8 呢 :对于我一开始学习的方法:: #include "main.h" #define led1 GPIO_Pi ...
- ARM+linux学习过程(1)虚拟机下ubuntu上网
总结:(1)通过bridge方式也可以实现ubuntu上网(只要PC物理网卡能上网),可以实现ping通主机和开发板 (2)要想上网简单上网,可以通过nat方式,在vmware中设置为nat方式,选择 ...
- 高速在MyEclipse中打开jsp类型的文件
MyEclipse打开jsp时老是要等上好几秒,嗯嗯,这个问题的确非常烦人,事实上都是MyEclipse的"自作聪明"的结果(它默认用Visual Designer来打开的),进行 ...
- angular的Dom操作
原文 https://www.jianshu.com/p/9d7249922bda 大纲 1.angular的DOM操作 2.为什么不能直接操作DOM? 3.三种错误操作DOM的方式 4.angula ...
- Access Violations 访问冲突(AVs)是Windows编程时发生的最麻烦的错误?
Access Violations<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&qu ...
- 用Ajax图片上传、预览、修改图片
首选图片的上传和下载并不是很难,但要注意细节. 一,给出前端图片上传的html代码 1.图片上传的控件 <img src="/${res}/images/default.png&quo ...
- Linux下 kprobe工具的使用
此处转载: 一.Kprobe简单介绍 kprobe是一个动态地收集调试和性能信息的工具,它从Dprobe项目派生而来,是一种非破坏性工具,用户用它差点儿能够跟踪不论什么函数或被运行的指令以及一些异步事 ...
- Android JNI编程(四)——C语言多级指针、数组取值、从控制台输入数组
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:前面我们介绍了一级指针的相关概念和用发,今天我们就来说一说多级指针. 1 ...
- 【19.46%】【codeforces 551B】ZgukistringZ
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- iptables 重启系统生效
1. 重启系统生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2. 即时生效,重启后失效 开启: service iptables ...