C# 自动映射相同类型的对象-覆盖布尔
我想使用AutoMapper将两个相同类型的对象合并在一起,如果字段为null或false,则覆盖该字段。例如,假设我有以下模型:C# 自动映射相同类型的对象-覆盖布尔,c#,.net,boolean,automapper,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 = ne
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);
Mapper.Initialize(cfg=>
{
cfg.CreateMap()
。对于所有成员(选项=>
{
options.Condition((源、目标、成员)=>member!=null);
});
});
var mergedModel=Mapper.Map(model1,model2);
但是,当然,我最终得到了mergedModel.D=false。我还需要什么条件才能覆盖false的bool?如果要在映射上实现一些逻辑,最好在每个成员上显式执行 但如果您真的想通过AutoMapper magic来实现,您可以添加以下条件:
options.Condition((source, destination, member) => (member as bool?) != false);
虽然没有回答这个问题,但从代码可读性的角度来看,使用AutoMapper将两个对象映射到相同的目标对象类型,同时应用一些增值业务逻辑并不容易,而静态自定义映射方法
TestModel-DoMyCustomMerge(TestModel,TestModel)
是否更直观?(例如,将业务逻辑隐藏在Automapper中可能会使维护变得棘手?)这是Automapper的一些非常奇怪的用例,我会将逻辑封装在类本身的合并方法或类似方法中