同一类型的自动应用映射对象 - 覆盖布尔



我想使用automapper将同一类型的两个对象合并在一起,如果字段为null或false,则覆盖字段。例如,说我有以下模型:

public class TestModel
{
    public string A { get; set; }
    public string B { get; set; }
    public bool C { get; set; }
    public bool D { get; set; }
}

并将两个模型设置为:

var model1 = new TestModel
{
    A = "a",
    B = "b",
    C = true,
    D = false
}
var model1 = new TestModel
{
    A = null,
    B = "b",
    C = false,
    D = true
}

我想合并它们,以便合并的模型看起来像

var mergedModel = new TestModel
{
    A = "a",
    B = "b",
    C = true,
    D = true
}

到目前为止,我有以下映射器配置:

Mapper.Initialize(cfg =>
{
    cfg.CreateMap<TestModel, TestModel>()
        .ForAllMembers(options =>
        {
            options.Condition((source, destination, member) => member != null);
        });
});
var mergedModel = Mapper.Map(model1, model2);

,但是,当然,我最终得到了MergedModel.d = false。我还需要哪些其他条件,以便伪造的布尔将被覆盖?

如果您要在映射上实现一些逻辑,最好明确地对每个成员进行。

但是,如果您真的想通过Automapper Magic进行此操作,则可以添加此条件:

options.Condition((source, destination, member) => (member as bool?) != false);

最新更新