[英]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.