这是我的情景。我有一个类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));
我知道这不会奏效,但我想这会是一个清单。 我不确定从哪里开始,或者如果有可能,我会非常感谢任何帮助。
答案 0 :(得分:3)
有几种方法可以实现这一目标:
使用ConstructUsing
和一些LINQ:
Mapper.CreateMap<Class1, IEnumerable<MyClass>>()
.ConstructUsing(
src => src.strings.Select(str => new MyClass { someString = str }));
使用&#34;内部&#34;从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
。这假设所有索引都匹配每个数组,并且每个数组中的元素数量相同。