AutoMapper - 类型的条件映射

2023-12-06

我想做类似以下的事情,我想知道是否有人知道该怎么做:

Mapper.CreateMap<Worksheet, V2WorksheetModel>().If(pWorksheet=> pWorksheet.VisitLevel == 2);
Mapper.CreateMap<Worksheet, V3WorksheetModel>().If(pWorksheet=> pWorksheet.VisitLevel == 3);

Worksheet entityVisit2 = MyService.GetWorksheetByID(100); //visit level 2
Worksheet entityVisit3 = MyService.GetWorksheetByID(150); //visit level 3
WorksheetModelBase modelBase1 = Mapper.Map(entityVisit2);  
WorksheetModelBase modelBase2 = Mapper.Map(entityVisit3);  
Assert.True(modelBase is V2WorksheetModel);
Assert.True(modelBase2 is V3WorksheetModel);

所以我希望 Mapper.Map() 返回正确的 WorksheetModelBase 派生类型。这可能吗? (我知道我可以在调用代码中执行 if 语句,但如果我可以使用这一行 Mapper.Map 来返回正确的类,那就太酷了。)

Thanks!


您可以只映射到基类,而不是映射 V2WorksheetModel 和 V3WorksheetModel 吗? 如果是的话你可以使用ConstructUsing在你的映射中:

[Test]
public void Test1()
{
    Mapper.CreateMap<Worksheet, WorksheetModelBase>().ConstructUsing(GetWorksheetModel);

    Worksheet entityVisit2 = new Worksheet { VisitLevel = 2 };
    Worksheet entityVisit3 = new Worksheet { VisitLevel = 3 };

    var modelBase1 = Mapper.Map<WorksheetModelBase>(entityVisit2);
    var modelBase2 = Mapper.Map<WorksheetModelBase>(entityVisit3);

    Assert.IsTrue(modelBase1 is V2WorksheetModel);
    Assert.IsTrue(modelBase2 is V3WorksheetModel);
}

private WorksheetModelBase GetWorksheetModel(ResolutionContext context)
{
    var worksheet = (Worksheet) context.SourceValue;
    if (worksheet.VisitLevel == 2)
        return new V2WorksheetModel();
    if (worksheet.VisitLevel == 3)
        return new V3WorksheetModel();
    return new WorksheetModelBase();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AutoMapper - 类型的条件映射 的相关文章

随机推荐

  • 如何区分泛型中的MethodBase

    我有一个基于的缓存 Dictionary
  • 从 Spotify 应用程序内访问 Spotify 元数据 API?

    我想从 Spotify 应用程序中运行 Spotify 搜索 查找某个艺术家的曲目 我没有该艺术家的 Spotify URI 只有名称 我没有在 App API 中找到运行搜索的功能 另一种选择是与ws spotify com访问 Spot
  • 将列表写入 csv 文件而不在 python 中循环

    我有一个列表列表 我需要将其写入 csv 文件 mylist Siddharth Bangalore email protected Rahul Bangalore email protected and so on 该列表通常大约有 20
  • AWS CFN 错误“参数 groupName 不能与参数子网一起使用”

    使用以下 yaml 时出现错误 我检查了代码 但我不认为有任何问题 我的结构计划有一个带有 2 个公有子网和 2 个私有子网的 VPC 一个Web服务器实例将放置在公共子网2中 我认为该问题可能与实例创建有关 因为该错误是在实例创建过程中出
  • Razor:如果模型是 List<>,则 @Html.LabelFor 创建空的“for”字段

    如果模型是对象列表 那么 Html LabelFor model gt model i member 创建一个空的for属性 DisplayName 工作正常 模型绑定也工作得很好 唯一不起作用的是for属性 下面有两个版本的MVC代码 前
  • C# 主动检测Lock键

    我有一个无线键盘和鼠标 没有任何锁定指示器 也没有任何捆绑软件来提供视觉帮助 所以我正在制作自己的 我明白了 如果我点击一个notifyIcon 它会列出哪些锁已打开 但我想通过在锁接合后提醒我来使其更智能 我在网上找到了一些项目 但老实说
  • 新窗口未在 Chrome 中作为选项卡打开

    我正在建造一些东西ONLY对于 Chrome 我想打开几个选项卡window open Chrome 会阻止它 但我可以接受启用它 但 Chrome 将它们打开为新窗口而不是选项卡 由于某些不清楚的原因 我只找到了有关对面的 我怎样才能实现
  • facebook graph api 获取不同帐户的关注者数量

    我需要通过 facebook graph api 获取不同的用户关注者数量 我通过用户名获取用户 ID 但如何获取该用户的关注者数量 提前致谢 您在这里至少面临两个问题 1 The usernameGraph API v2 0 已弃用该字段
  • 重定向动作中的Struts2动态参数名称

    我成功地对我的 struts2 映射文件之一使用重定向操作 如下所示
  • android 调整ViewBounds 错误?

    当我在 imageView xml 中使用 android adjustViewBounds true 时 它不起作用 如果我把 setAdjustViewBounds true 在我的 ImageView 的构造函数中 它工作正常 有什么
  • 从任何角度来看 ++i 和 i+=1 有什么区别

    这是 kn king 的 c 编程 现代方法 中的一个问题 我无法理解他给出的解决方案 The expression i is equivalent to i 1 The value of both expressions is i aft
  • Django 中查询集中与多行记录相关的字段的串联

    我必须建立一对多关系的模型 我试图用它来区分记录的类型 假设第一个模型专用于书籍信息 第二个模型是某些类型 例如 A B C 并且类型表与书籍之间存在间接关系 因此每本书可以是 A B 或 C 或任何可能的组合类型 我想使用串联 或注释中的
  • 有没有办法将 twilio 中的 mulaw 音频流保存在文件中

    我正在使用 Twilio 语音流功能 但我不想使用 Twilio 录音功能 当 Twilio 开始向我的服务器发送语音流时 我想将其作为音频文件实时存储到磁盘中 我今天遇到了同样的问题 并找到了一种为 mu law 标头生成 WAVE 标头
  • 读取行时,awk $line 带有多个分隔符

    我正在尝试一个小的变化this 除了我告诉 awk 要根据第 5 个字段分割的文件的分隔符可以是冒号 或制表符 t 我做的是awk F t 单独来看 它确实打印了正确的 5 字段 但是 当我尝试将其合并到更大的命令中时 它返回以下错误 pr
  • Bash shell 十进制到二进制以 2 为基数的转换

    我正在 Bash 中寻找一种将十进制数转换为二进制数的简单方法 我有需要转换的变量 ip1 ip2 ip3 ip4 有没有一种简单的方法可以做到这一点 而无需查看每个单独的数字 我宁愿不必编写大量代码 您可以使用bc as echo oba
  • 连接来自位于不同服务器上的多个 SQL Server 数据库的表

    连接位于不同服务器上的数据库上的 SQL Server 数据库表的推荐方法是什么 所有数据库都将位于同一网络上 链接服务器可以工作 但有一些问题让我试图避免它们 随着时间的推移 它们会让从高层管理您的环境变成一场噩梦 服务器来来去去 升级等
  • 如何测试列表是否按升序排序

    这是练习的问题 编写一个函数来检查列表是否按升序排序 def ascending lst for k in range 0 len lst if lst k lt lst k 1 print Ok else print NOk the nu
  • Flask SocketIO 不会向特定房间发送数据

    我正在创建一个程序 该程序从 Flask 应用程序获取数据 并且可以将数据发送到 Flask 应用程序 并且我正在使用 Socket IO 来执行此操作 socketio emit receive data data 当发送到此时 这最终会
  • 表情符号替换 - PHP

    我需要将文本表情符号替换为 html 图像标签 我整理了以下数据 private smile array gt o 3 c gt 8 private laugh array gt D D D 8 D x D X D D D 3 8 priv
  • AutoMapper - 类型的条件映射

    我想做类似以下的事情 我想知道是否有人知道该怎么做 Mapper CreateMap