簡體   English   中英

使用自動映射器將字符串類型的列表映射到具有字符串屬性的對象列表

[英]Mapping a list of type string to a list of objects with a string property using automapper

這是我的情況。 我有一個類Class1,其屬性類型為string []

Class Class1
{
    string[] strings{ get; set;}
}

我想將列表中的每個字符串映射到MyClass類型的列表中的字符串屬性。

Class MyClass
{
    string someString { get; set;]
}

因此,使用automapper會像這樣

Mapper.CreateMap<Class1, IEnumerable<MyClass>>().ForMember(dest => dest.someString, opts => opts.MapFrom(src => src.strings));

我知道這行不通,但我想這會列出一些東西。 我不確定從這里走到哪里,或者是否有任何幫助將不勝感激。

有幾種方法可以實現此目的:

  1. 與一些LINQ一起使用ConstructUsing

     Mapper.CreateMap<Class1, IEnumerable<MyClass>>() .ConstructUsing( src => src.strings.Select(str => new MyClass { someString = str })); 
  2. 使用從stringMyClass的“內部”映射,然后從ConstructUsing調用

     Mapper.CreateMap<string, MyClass>() .ConstructUsing(str => new MyClass { someString = str }); Mapper.CreateMap<Class1, IEnumerable<MyClass>>() .ConstructUsing(src => Mapper.Map<IEnumerable<MyClass>>(src.strings)); 

根據評論更新

如果源類中有多個string[]屬性,而目標類中有多個對應的string屬性,則可以執行以下操作:

Mapper.CreateMap<Class1, IEnumerable<MyClass>>()
    .ConstructUsing(
        src => src.strings
            .Zip(src.strings2, (str1, str2) => new { str1, str2 })
            .Zip(src.strings3, (res1, str3) => 
                new MyClass 
                { 
                    someString = res1.str1,
                    someString2 = res1.str2, 
                    someString3 = str3
                }));

基本上,您需要打.Zip次數很多。 假設每個數組的所有索引都匹配並且每個數組中的元素數相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM