Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用AfterMap映射集合属性上的属性_C#_.net_Automapper - Fatal编程技术网

C# 如何使用AfterMap映射集合属性上的属性

C# 如何使用AfterMap映射集合属性上的属性,c#,.net,automapper,C#,.net,Automapper,我有两个实体和两个DTO。我正在将实体映射到DTO。DTO的简化版本如下所示: public class FooDto { // Other properties removed for clarity. public string Description { get; set; } public decimal Total { get; set; } public ICollection<BarDto> Bars { get; set; }

我有两个实体和两个DTO。我正在将实体映射到DTO。DTO的简化版本如下所示:

public class FooDto {
     // Other properties removed for clarity.
     public string Description { get; set; }
     public decimal Total { get; set; }
     public ICollection<BarDto> Bars { get; set; }
}

public class BarDto {
     // Other properties removed for clarity.
     public decimal Total { get; set; }
}
映射

我在方法中将其映射为:

public FooDto Map(IMapper mapper, Foo foo) {

        // _fooTotalService and _barTotalService injected elsewhere by DI.

        return mapper.Map<Foo, FooDto>(foo, opt =>
        {
            opt.AfterMap((src, dest) =>
            {
                dest.Total = _fooTotalService.GetTotal(src);
                dest.Bars.Total = ?????? // Needs to use _barTotalService.CalculateTotal(bar)
            });
        });
}
publicfoodto映射(IMapper映射器,Foo-Foo){
//_foottalservice和_barTotalService由DI注入其他地方。
返回mapper.Map(foo,opt=>
{
可选后地图((src,dest)=>
{
目的地总计=_foottalservice.GetTotal(src);
dest.bar.Total=?????//需要使用_barTotalService.CalculateTotal(bar)
});
});
}
AutoMapper已经为Foo到FooDto和Bar到BarDto配置了映射,这些映射工作正常

我需要使用一个服务更新FooDto中的每个BarDto(原因太长,无法深入讨论,只需说需要这样做)

使用
\u barTotalService.CalculateTotal(bar)
方法,我需要在
AfterMap
中使用什么语法来映射
BarTo
的每个
Total
属性,其中
bar
是有问题的
bar

请注意,
\u barTotalService.CalculateTotal
方法以
Bar
not
BarDto
为例,这应该是可行的-

 AutoMapper.Mapper.CreateMap<Foo, FooDto>()
            .AfterMap((src, dest) =>
            {
                dest.Total = 8;//service call here
                for (var i = 0; i < dest.Bars.Count; i++)
                {
                    dest.Bars.ElementAt(i).Total = 9;//service call with src.Bars.ElementAt(i)
                }
            });
AutoMapper.Mapper.CreateMap<Bar, BarDto>();
var t = AutoMapper.Mapper.Map<FooDto>(new Foo
        {
            Bars = new List<Bar> { new Bar { } }
        });
AutoMapper.Mapper.CreateMap()
.AfterMap((src,dest)=>
{
dest.Total=8;//此处的服务调用
对于(变量i=0;i
您可以研究如何使用
TypeConverter
,这些类可以在其构造函数中注入依赖项。因此,您在那里注入服务,并在
CreateMap
之后使用类似
ConstructUsing
的内容
Total
BarDto
的一个属性
FooDto.bar
不能具有该属性。另外,
bar
如何传入
\u barTotalService.CalculateTotal(bar)
FooDto
有一个名为
bar
的集合,类型为
BarDto
。依次,每个
BarDto
都有一个名为
Total
的属性。我需要使用原始映射的
Foo
对象上包含的
Bar
实例设置此
Total
属性。谢谢,阿米特,但我认为这不起作用。服务调用以
Bar
not
BarDto
为例。
for
循环正在迭代
BarDto
 AutoMapper.Mapper.CreateMap<Foo, FooDto>()
            .AfterMap((src, dest) =>
            {
                dest.Total = 8;//service call here
                for (var i = 0; i < dest.Bars.Count; i++)
                {
                    dest.Bars.ElementAt(i).Total = 9;//service call with src.Bars.ElementAt(i)
                }
            });
AutoMapper.Mapper.CreateMap<Bar, BarDto>();
var t = AutoMapper.Mapper.Map<FooDto>(new Foo
        {
            Bars = new List<Bar> { new Bar { } }
        });