首页 > 其他分享 >Mapster工具类

Mapster工具类

时间:2024-05-09 17:48:20浏览次数:21  
标签:return 映射 member source Mapster 工具 where class

一、使用Mapster

//安装nuget包
Install-Package Mapster

二、封装工具类

/// <summary>
/// Mapster映射帮助类 -基础使用
/// Mapster 版本7.3.0(或7.2.0)
/// ASP.NET使用时可直接services.AddMapster();
/// </summary>
public class MapsterHelper
{
    #region 实体映射
    /// <summary>
    /// 1.1、类型映射_默认字段一一对应
    /// T需要映射后的实体 = 需要映射的实体.Adapt<T需要映射后的实体>();
    /// </summary>
    /// <typeparam name="TSource">源类型</typeparam>
    /// <typeparam name="TDestination">目标类型</typeparam>
    /// <param name="tSource">源数据</param>
    /// <returns></returns>
    public static TDestination MapsterTo<TSource, TDestination>(TSource tSource) where TSource : class where TDestination : class
    {
        if (tSource == null) return default;

        return tSource.Adapt<TDestination>();
    }
    /// <summary>
    /// 1.2、类型映射_默认字段一一对应 (映射到现有对象)
    /// T需要映射后的实体 = 需要映射的实体.Adapt<T需要映射后的实体>();
    /// </summary>
    /// <typeparam name="TSource">源类型</typeparam>
    /// <typeparam name="TDestination">目标类型</typeparam>
    /// <param name="tDestination">目标对象</param>
    /// <param name="tSource">源数据</param>
    /// <returns></returns>
    public static TDestination MapsterTo<TSource, TDestination>(TDestination tDestination, TSource tSource) where TSource : class where TDestination : class
    {
        if (tSource == null) return default;

        return tSource.Adapt(tDestination);
    }

    /// <summary>
    /// 2、类型映射
    /// ① 字段名称不对应
    /// ② 类型转化
    /// ③ 字段省略
    /// ④ 字段名称或类型不对应
    /// ⑤ 条件赋值或null处理
    /// ⑥ 组合赋值
    /// </summary>
    /// <typeparam name="TSource">源类型</typeparam>
    /// <typeparam name="TDestination">目标类型</typeparam>
    /// <param name="tSource">源数据</param>
    /// <param name="configurationExpression">类型</param>
    /// <returns></returns>
    public static TDestination MapsterTo<TSource, TDestination>(TSource tSource, TypeAdapterConfig typeAdapterConfig) where TSource : class where TDestination : class
    {
        if (tSource == null) return default;

        //var typeAdapterConfig = new TypeAdapterConfig();
        //typeAdapterConfig.ForType<MapsterTestTable_ViewModel, MapsterTestTable>()
        //    .Map(member => member.DestName, source => source.Name)  // 指定字段一一对应
        //    .Map(member => member.Birthday, source => source.Birthday.ToString("yy-MM-dd HH:mm"))                              // 指定字段,并转化指定的格式
        //    .Map(member => member.Age, source => source.Age > 5)                                                               // 条件赋值
        //    .Ignore(member => member.A1)                                                                                       // 忽略该字段,不给该字段赋值
        //    .IgnoreNullValues(true)                                                                                            // 忽略空值映射
        //    .IgnoreAttribute(typeof(DataMemberAttribute))                                                                      // 忽略指定特性的字段
        //    .Map(member => member.A3, source => source.Name + source.Age * 3 + source.Birthday.ToString("d"))                  // 可以自己随意组合赋值
        //    .NameMatchingStrategy(NameMatchingStrategy.IgnoreCase);                                                            // 忽略字段名称的大小写

        var mapper = new Mapper(typeAdapterConfig);  // 可以自己随意组合赋值
        return mapper.Map<TDestination>(tSource);
    }
    #endregion 实体映射

    #region 列表映射
    /// <summary>
    /// 3、集合列表类型映射,默认字段名字一一对应
    /// </summary>
    /// <typeparam name="TSource">源类型</typeparam>
    /// <typeparam name="TDestination">目标类型</typeparam>
    /// <param name="source">源数据</param>
    /// <returns></returns>
    public static List<TDestination> MapsterToList<TSource, TDestination>(List<TSource> sources) where TSource : class where TDestination : class
    {
        if (sources == null) return new List<TDestination>();

        return sources.Adapt<List<TDestination>>();
    }

    /// <summary>
    /// 3、集合列表类型映射,默认字段名字一一对应
    /// </summary>
    /// <typeparam name="TSource">源类型</typeparam>
    /// <typeparam name="TDestination">目标类型</typeparam>
    /// <param name="source">源数据</param>
    /// <returns></returns>
    public static List<TDestination> MapsterToList<TSource, TDestination>(List<TSource> sources, TypeAdapterConfig typeAdapterConfig) where TSource : class where TDestination : class
    {
        if (sources == null) return new List<TDestination>();

        var mapper = new Mapper(typeAdapterConfig);  // 可以自己随意组合赋值
        return mapper.Map<List<TDestination>>(sources);
    }
    #endregion 列表映射


}

标签:return,映射,member,source,Mapster,工具,where,class
From: https://www.cnblogs.com/eago/p/18182799

相关文章

  • kubectl工具
    1.k8s集群的命令行工具kubectl1)语法格式: getnodegetnodesgetnodek8snode1 #k8snode1是一个node名字2)帮助命令kubectl--help具体查看某个操作:kubectlget--help3)基础命令  4)目前使用到的命令  ......
  • 原型工具分析及对比
    主流的原型设计工具包括Axure、墨刀、Sketch、AdobeXD、Figma等。下面我将对这几种工具进行简要比较,并重点介绍其中Axure、墨刀及对比。Axure的特点:1.Axure是一款功能强大的原型设计工具,适用于高保真原型设计和交互式原型制作。2.支持复杂交互、动画效果和数据驱动功能,可用于......
  • 原型设计工具
    AxureRP是一个专业的快速原型设计工具,它可以让设计师们利用需求,设计功能和界面来快速的创建应用软件的线框图、流程图、原型和规格说明文档,并且同时支持多人协作和版本控制管理。产品原型设计的最基础工作,就是结合批注、大量的说明以及流程图画框架图,将自己的产品原型完整而准确......
  • 主流原型设计工具的特点对比
    对比介绍几种流行的原型设计工具:Axure,墨刀(Mockplus),InVision和UXPinAxure特点:高保真原型制作:Axure支持复杂的交互设计和动态内容,使得原型非常接近最终产品的实际效果。丰富的组件库和模板:提供广泛的组件库和预设模板,便于快速构建界面。协同合作功能:允许多人实时协......
  • 原型设计工具
    在本篇博客中将主要介绍主流的原型设计工具。Axure开发公司:AxureSoftwareSolutions,Inc.官网:AxureRP-UXPrototypes,Specifications,andDiagramsinOneToolAxure的特点1.Axure拥有强大的交互制作功能,它能够实现复杂的条件判断和丰富的动态效果。这一点在设计具有......
  • 主流原型设计工具
    首先介绍的是Axure,它是一款功能强大的原型设计工具,广泛应用于用户体验设计和交互设计领域。以下是Axure的特点和使用方法:特点:交互性强:Axure允许用户创建高度交互的原型,包括动态效果、状态变化、条件逻辑等,可以模拟真实应用程序的交互过程。复杂场景支持:与其他原型设计工具相比,A......
  • LangSegment:多语言(97种语言)的混合文本自动分词工具
    项目简介它是一个强大的多语言(97种语言)的混合文本自动分词工具。[中日英韩:已测试]主要用途:它非常适合各种TTS语音合成项目,多语种混合文本的前端推理,和预处理后端训练。它基于py3langid的扩展实现(>=python3.6)。LangSegmentItisamulti-lingual(97languages)textcon......
  • FuzzyWuzzy:模糊字符串匹配工具包
    在日常开发工作中,经常会遇到这样的一个问题:要对数据中的某个字段进行匹配,但这个字段有可能会有微小的差异。比如同样是招聘岗位的数据,里面省份一栏有的写“广西”,有的写“广西壮族自治区”,甚至还有写“广西省”……为此不得不增加许多代码来处理这些情况。今天跟大家分享FuzzyWuz......
  • 一键自动化博客发布工具,用过的人都说好(cnblogs篇)
    cnblogs和其他的博客平台相比会比较复杂,需要设置的项目也比较多一些,弄懂了cnblogs的实现方式,那么你应该对selenium的整个框架使用已经烂熟于心了。除了正常的标题,内容,摘要之外,cnblogs还需要设置个人分类,合集,投稿选项,投稿至网站分类,tags标签等内容。要填的东西比较多,比较复杂。接......
  • dremio-stress dremio 压力测试工具
    dremio-stress是基于rest埃及jdbc的dremio压力测试工具,实现上相对简单,并不是比较复杂的东西,可以结合一些业务场景使用同时建议和dremio-diagnostic-collector配合起来说明此工具应该并非官方的,实际如果需要进行大规模测试基于tpc-h会更加标准参考资料https://github.com......