P37 排序(中)
今天来实现属性映射服务
这行代码先注释掉
Services里面创建PropertyMappingService
创建PropertyMappingValue
Name对应的entity的firstName和lastname就放在DestinationProperties里面。
然后再添加构造函数,把定义的两个属性传递进去
第二个参数,使用Resharp的功能自动生成。
自动生成
这个参数也可以用Resharp来生成,只不过可能有一些慢。
正对集合,就需要判断是否等于null
创建映射到属性。
默认设置为false
比较的时候忽略大小写
name在EmployeeDto上面对应entity上面两个属性 FirstName和LastName
age虽然是一一对应的,但是需要把revert反转。
以上从employeeDto到employeeEntity的映射关系就配置好了。放到了一个Dictionary里面
再定义方法根据传入的类型获取映射关系
现在先建一个类,把这些映射关系存到里面。PropertyMapping
重构下改成大写的
这里不支持泛型的解析,所以显示红色报错
这个时候可以使用标记接口。定义一个接口,接口内没有定义任何的属性和方法,相当于是一个空的接口。这个接口的作用就是给某些类打上标签。所以现在要建立接口,让PropertyMapping实现这个接口。
创建接口
实现这个接口
new一个对象出来防止出现空指针的异常
再来做个构造函数
这里加了个toList
梳理下
首先这个里Dictonary存的就是映射关系。从dto一个属性可以映射到多个属性。多个属性就放到PropertyMappingValue里面。PropertyMappingValue这个类型里面有集合,就可以存放多个属性。
mapping里面还有另外一个属性就是revert。顺序反转。
每一段映射关系使用类来表示
就是PropertyMapping这样一个类。
实现一个标记接口,里面什么方法都没有,主要用他是因为想让service里面,
上面实现接口,就是为了让这里的IList属性可以成功的建立。
创建构造函数,就是把原始的映射关系存到IList这个集合里面。
最后有个方法getPropertyMapping通过两个类型TSource和TDestination这两个类型把映射关系取出来。
取出来的结果是Dictionary类型。
实现依赖注入,resharp:ctrl+shift+R
然后就在这个类里面构建了interface
把接口挪到单独的文件里面:alt+enter
这样就挪到了一个单独的文件里面
startup注册service
这个service属于比较轻量级的所以使用AddTransient
repository内使用
自动生成依赖注入
加上判断是否为空
先取出EmployeeDto到Employee的映射。
这样他的第二个参数就已经有了。
实现扩展方法
它一个静态类。里面的方法也是静态方法。它是争对IQueryable扩展。
判断空格
反转
取反,正序变倒叙,倒叙变正序
最后就是用安装的扩展库进行排序了。
安装扩展库
最后返回source
resharp自动稍微改一下
测试
倒叙排列
由于数据有限,多个字段排序试不出来效果。
测试下多个排序的语法
结束