PocoEmit字典增强功能

一、PocoEmit集合扩展中支持字典

  • 支持字典互转
  • 支持数组转字典(索引转化为字典主键)
  • 支持列表转字典(索引转化为字典主键)

默认集合功能不支持实体属性转字典

为此开发了以下字典增强功能来实现实体转字典

二、实体和字典互转

1. ToDictionary

实体成员转化为object字典

csharp 复制代码
User user = new() { Id = 3, Name = "张三" };
IDictionary<string, object> dic = _mapper.ToDictionary(user);

2. GetToDictionaryFunc

实体成员转化为object字典

csharp 复制代码
var func = _mapper.GetToDictionaryFunc<User>();
User user = new() { Id = 3, Name = "张三" };
IDictionary<string, object> dic = func(user);

3. FromDictionary

object字典转化为实体

csharp 复制代码
Dictionary<string, object> dic = new() { { nameof(User.Id), "3" }, { nameof(User.Name), "张三" } };
User user = _mapper.FromDictionary<User>(dic);

4. GetFromDictionaryFunc

object字典转化为实体

csharp 复制代码
var func = _mapper.GetFromDictionaryFunc<User>();
Dictionary<string, object> dic = new() { { nameof(User.Id), "3" }, { nameof(User.Name), "张三" } };
User user = func(dic);

三、实体属性平铺

1. CreateDictionaryConvertFunc

  • 委托编译生成,重复使用需要缓存
  • 递归转化指定类型成员为字典
  • 支持同类型字典
  • 不支持数组和其他集合
  • 相当于彻底平铺展开
csharp 复制代码
var func = _mapper.CreateDictionaryConvertFunc<Student, Dictionary<string, int>>();
Student source = new()
{
    User = new() { Id = 2, Name = "Jxj" },
    Age = 17,
    Score = new() { { "语文", 95 }, { "数学", 96 } }
};
Dictionary<string, int> result = func(source);
// result.Count == 4

6. CreateDictionaryConvertFunc重载方法

  • 委托编译生成,重复使用需要缓存
  • 递归转化指定类型成员为字典
  • 支持同类型字典
  • 不支持数组和其他集合
  • 相当于彻底平铺展开
csharp 复制代码
var func = _mapper.CreateDictionaryConvertFunc<Student, int, IDictionary<string, string>>();
Student source = new()
{
    User = new() { Id = 2, Name = "Jxj" },
    Age = 17,
    Scores = new() { { "语文", 95 }, { "数学", 96 } }
};
IDictionary<string, string> result = func(source);
// result.Count == 4

源码托管地址: https://github.com/donetsoftwork/MyEmit ,也欢迎大家直接查看源码。

gitee同步更新:https://gitee.com/donetsoftwork/MyEmit

如果大家喜欢请动动您发财的小手手帮忙点一下Star。

相关推荐
七夜zippoe8 天前
Spring与MyBatis整合原理及事务管理
java·spring·mybatis·事务·mapper
七夜zippoe10 天前
MyBatis核心源码解析 从SqlSession到Mapper接口的绑定过程
java·mybatis·mapper·sqlsession·缓存机制
xiangji3 个月前
PocoEmit遥遥领先于AutoMapper之打通充血模型的任督二脉
ioc·ddd·expression·类型转化
xiangji3 个月前
PocoEmit遥遥领先于AutoMapper之循环引用
automapper·mapper·emit
阿里嘎多哈基米4 个月前
SQL 层面行转列
数据库·sql·状态模式·mapper·行转列
xiangji4 个月前
微软.net表达式编译居然有bug?
表达式·expression·emit
xiangji4 个月前
如何使用PocoEmit.Mapper替代AutoMapper
mapper·emit
胡斌附体7 个月前
vue父子组件通信的使用, 跟新v-model
vue·v-model·使用场景·emit·子父组件通信·change事件
abcnull7 个月前
mybatis的mapper对应的xml写法
xml·sql·spring·mybatis·mapper