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。

相关推荐
xiangji4 天前
DBShadow.net之依赖注入
orm·异步·mapper·sqlbuilder
xiangji5 天前
DBShadow.net之化繁为简
orm·mapper·sqlbuilder
hqwest18 天前
码上通QT实战15--监控页面07-打开串口连接
开发语言·qt·多线程·signal·slot·emit·信号和槽
hqwest19 天前
码上通QT实战08--导航按钮切换界面
开发语言·qt·slot·信号与槽·connect·signals·emit
七夜zippoe1 个月前
Spring与MyBatis整合原理及事务管理
java·spring·mybatis·事务·mapper
七夜zippoe1 个月前
MyBatis核心源码解析 从SqlSession到Mapper接口的绑定过程
java·mybatis·mapper·sqlsession·缓存机制
xiangji4 个月前
PocoEmit遥遥领先于AutoMapper之打通充血模型的任督二脉
ioc·ddd·expression·类型转化
xiangji4 个月前
PocoEmit遥遥领先于AutoMapper之循环引用
automapper·mapper·emit
阿里嘎多哈基米5 个月前
SQL 层面行转列
数据库·sql·状态模式·mapper·行转列
xiangji5 个月前
微软.net表达式编译居然有bug?
表达式·expression·emit