gpt4 book ai didi

c# - AutoMapper - 类型的条件映射

转载 作者:行者123 更新时间:2023-11-30 22:30:15 26 4
gpt4 key购买 nike

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

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 来返回正确的类,那就太棒了。)

谢谢!

最佳答案

您可以不映射 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();
}

关于c# - AutoMapper - 类型的条件映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9746650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com