[英]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));
我知道這行不通,但我想這會列出一些東西。 我不確定從這里走到哪里,或者是否有任何幫助將不勝感激。
有幾種方法可以實現此目的:
與一些LINQ一起使用ConstructUsing
:
Mapper.CreateMap<Class1, IEnumerable<MyClass>>() .ConstructUsing( src => src.strings.Select(str => new MyClass { someString = str }));
使用從string
到MyClass
的“內部”映射,然后從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.