【问题标题】:partial cloning of List<T> using automapper使用自动映射器部分克隆 List<T>
【发布时间】:2018-07-14 21:41:18
【问题描述】:

我有一个具有某些属性的列表,例如

public Class Person 
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public List<Address> Addresses {get;set}
    public DateTime CreatedOn { get; set; }
    public string CreatedBy { get; set; } 
}

public class Address
{
    public string StreeNo { get; set; }
    public string Town { get; set; }
    public DateTime CreatedOn { get; set; }
    public string CreatedBy { get; set; }
}

我需要将它映射到一个不应该有 CreatedOn 和 CreatedBy 自动映射器的动态对象,我已经看到了一个使用

的示例
public static List<T> MapDynamicList<T>(IEnumerable<object> obj)
{
    var config = new MapperConfiguration(c => c.CreateMissingTypeMaps = true);
    var mapper = config.CreateMapper();

    var newModel = obj.Select(mapper.Map<T>).ToList();

    return newModel;
}

但是这个映射具有与源相同的属性,因为我不希望将 CreatedOn 和 CreatedBy 复制到目标中

这一切背后的原因是我试图创建一个没有提及属性的视图模型,因为我的所有类都有 CreatedOn Created By 并且随着类的更新,手动为每个类创建视图模型非常困难。

我们将不胜感激任何帮助

【问题讨论】:

    标签: c# automapper


    【解决方案1】:

    如果您的目的地不需要这些属性,那么只需创建没有此类属性的视图模型 :)

    public class AddressViewModel
    {
        public string StreeNo { get; set; }
        public string Town { get; set; }
    }
    
    public Class PersonViewModel
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public AddressViewModel[] Addresses { get; set; }
    }
    
    // Automapper profile
    CreateMap<Address, AddressViewModel();
    CreateMap<Person, PersonViewModel>();
    
    // Usage
    var personViewModelList = MapDynamicList<PersonViewModel>(persons);
    

    您也可以使用 Automapper .Ignore(),但具有显式 ViewModel 类的解决方案似乎更清晰。

    顺便说一句,你不需要使用 LINQ .Select 来映射IEnumerable,Automapper 可以映射集合,所以不要这样:

    var newModel = obj.Select(mapper.Map<T>).ToList();
    

    你可以这样做:

    var newModel = mapper.Map<List<T>>(obj);
    

    这会将每个对象映射到T,然后将它们放入一个列表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 2016-05-26
      • 2016-02-25
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      相关资源
      最近更新 更多