2017-04-05 14 views
0

私は性質の多くとのViewModelを持っており、他のviewmodelsAutoMapper:ネストされたモデルの行数の制限

public ICollection<ListView> Elements { get; set; } 

のコレクションの多くは、私がAutoMapperだけで、このコレクションの最初の10個の要素を取ることをどこかに指定することができます?

答えて

1

マップで解決することができます。これは、あなたのようなので、自分自身の表現に入れる機会を与えるだろう:あなたのマッピングの設定で使用して

YourClassConstructorOrWhatever(){ 
    AutoMapper.Mapper.CreateMap<YourSourceObject, YourDestObject>() 
      .ForMember(dest => dest.Elements, opt => opt.ResolveUsing(src => 
      { 
       var result = new List<YourMapObject>(); 
       foreach (var element in src.Elements.Take(10)) 
       { 
         result.Add(Mapper.Map<YourMapObject>(element)); 
       } 
       return result;    
      })); 
} 

Resolveは、あなたが別のものをマップする方法を指定することができます。

詳細情報と例がここで見つけることができます:あなたはまた、これを行うには、カスタムリゾルバを使用することができ https://github.com/AutoMapper/AutoMapper/wiki/Custom-value-resolvers

Mapper.Initialize(cfg => { 
    cfg.CreateMap<Source, Destination>() 
     .ForMember(dest => dest.Total, 
      opt => opt.ResolveUsing<CustomResolver, decimal>(src => src.SubTotal)); 

    cfg.CreateMap<OtherSource, OtherDest>() 
     .ForMember(dest => dest.OtherTotal, opt => opt.ResolveUsing<CustomResolver, decimal>(src => src.OtherSubTotal)); 
}); 

public class CustomResolver : IMemberValueResolver<object, object, decimal, decimal> { 

    public decimal Resolve(object source, object destination, decimal sourceMember, decimal destinationMember, ResolutionContext context) { 
     // your mapper logic here 
    } 
} 

https://github.com/AutoMapper/AutoMapper/wiki/Custom-value-resolvers#customizing-the-source-value-supplied-to-the-resolver

+0

はあなたにもちょうどMapper.Map <リストを返すんでしたように思えます>(src.Elements.Take(10)); foreachループの代わりに。 – stibay

+0

@stibay大きな単純化!はい、それも動作します。 –

関連する問題