gpt4 book ai didi

c# - AutoMapper 根据其他模型属性值映射所有属性

转载 作者:太空宇宙 更新时间:2023-11-03 14:48:12 25 4
gpt4 key购买 nike

我有以下场景:

源类:

   public class Source
{
public int? A { get; set; }

public int? B { get; set; }

public int? C { get; set; }
}

目标类:

 public class Destination
{
public int A { get; set; }

public bool AIsNull { get; set; }

public int B { get; set; }

public bool BIsNull { get; set; }

public int C { get; set; }

public bool CIsNull { get; set; }
}

我想通过以下方式从 Source => Destion 获取映射:

  • 尝试使用关联的源属性设置目标属性(这可以使用转换器(实现 ITypeConverter)来完成)
  • 设置属性后,我想根据可为空的源属性设置目标关联的 IsNull 属性。

编辑,经过一些研究:

  class Program
{
static void Main(string[] args)
{
var srcClass = new SourceClass { Value1 = 10, Value2 = null, Value3 = 20 };

Mapper.Initialize(cfg =>
{
cfg.ClearPrefixes();
cfg.RecognizePostfixes("IsNull");
cfg.CreateMap<SourceClass, TargetClass>();
});

var targetClass = Mapper.Map<SourceClass, TargetClass>(srcClass);

}
}

public class SourceClass
{
public int? Value1 { get; set; }
public int? Value2 { get; set; }
public int? Value3 { get; set; }
}

public class TargetClass
{
public bool Value1IsNull { get; set; }
public bool Value2IsNull { get; set; }
public bool Value3IsNull { get; set; }
}

但是,这个案例并没有发生魔法

最佳答案

我认为这样的事情应该可行,我没有在 VS 中测试过,所以请谨慎使用。

var map = CreateMap<Source,Target>();

map.ForAllMembers(opt => opt.Ignore());

map.ForMember(dest => dest.A, opt => opt.MapFrom( src => src.A.HasValue ? src.A.Value : 0));

map.ForMember(dest => dest.AIsNull, opt => opt.MapFrom( src => src.A.HasValue ? true : false));

关于c# - AutoMapper 根据其他模型属性值映射所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53224363/

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