自动映射相同类型的对象 - 覆盖Bool

时间:2017-11-22 16:40:45

标签: c# .net boolean automapper

我想使用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。我需要什么其他条件才能覆盖错误的bool?

1 个答案:

答案 0 :(得分:1)

如果你在映射上实现某些逻辑,那么最好明确地对每个成员执行。

但如果你真的想通过AutoMapper魔术来做,你可以添加这个条件:

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