c#自动映射器如何将自动增量属性添加到目标投影?

c#自动映射器如何将自动增量属性添加到目标投影?,c#,automapper,C#,Automapper,我们有源对象“StockBase”和目标对象“StockDTO”。在将“StockBase”映射到“StockDTO”时,我们希望添加一个属性,该属性将给出集合的索引,即在“StockDTO”对象中自动递增1 例如,“库存”具有名称、所有者、颜色、保修等属性 虽然“StockDTO”具有Name、Owner+等属性,但我们希望添加自动递增id,以使集合中该股票的排名从1开始递增1 我读过,但是当在aftermap中将列表映射到列表而不复制内容时,有没有更好的方法可以做到这一点?我能想到的防止多次

我们有源对象“StockBase”和目标对象“StockDTO”。在将“StockBase”映射到“StockDTO”时,我们希望添加一个属性,该属性将给出集合的索引,即在“StockDTO”对象中自动递增1

例如,“库存”具有名称、所有者、颜色、保修等属性

虽然“StockDTO”具有Name、Owner+等属性,但我们希望添加自动递增id,以使集合中该股票的排名从1开始递增1


我读过,但是当在aftermap中将列表映射到列表而不复制内容时,有没有更好的方法可以做到这一点?

我能想到的防止多次迭代集合的唯一方法是这样的:

public class A {  }

public class B { public int Index { get;set; } }

var colA = new List<A>();
var colB = colA.Select((a, ix) => 
{
   var b = Mapper.Map<B>(a);
   b.Index = ix + 1;
   return b;
});
公共类A{}
公共类B{public int Index{get;set;}}
var colA=新列表();
var colB=colA.Select((a,ix)=>
{
var b=映射器.Map(a);
b、 指数=ix+1;
返回b;
});
因此,代码只在集合中迭代一次,并使用
Mapper
及其映射配置文件,此外,在投影期间还指定了自动递增属性


注意:通常,您不会使用静态
Mapper
类,而是使用注入的
IMapper
实例。

但是由于多次调用Mapper.map,可能会影响性能,这是唯一一个开发列表映射的用例。最新版本的AutoMapper应该缓存类型、配置文件等内容,因此,性能影响不应该是什么大问题。但是,您可以测试/测量它以完全确定。否则,您应该使用AfterMap中的选项,在这里您将再次遍历整个集合。