自动映射器:将 List<string> 映射到 List<Class>
Automapper: map List<string> to List<Class>
如何将 List<string>
映射到 List<Class>
?
用例:我从 Webservice 得到一个带有字符串列表的 class,但在我的 MVC Viewmodel 中,我想要 Class 而不是单个 属性,它具有字符串的值。这样我就可以将验证属性添加到 属性.
我知道如何将 List 转换为 List,但是我无法通过其他方式工作。
有什么简单的解决办法吗?
您可以使用 Linq 轻松做到这一点。
var newList = oldList.Select(x => new Item(x)).ToList();
你可以这样做:
void Main()
{
AutoMapper.Mapper.CreateMap<string,A>()
.ForMember(a => a.Name, m => m.MapFrom(s => s));
new[] {"A", "B"}.Select (AutoMapper.Mapper.Map<A>).Dump();
}
class A
{
public string Name { get; set; }
}
(Linqpad 代码)
但我认为这可以作为过度工程的教科书示例。就像丹尼尔的例子一样。
使用 AutoMapper 执行此操作的方法是使用 .ConstructUsing
:
Mapper.CreateMap<string, Class>()
.ConstructUsing(str => new Class { MyProp = str });
如何将 List<string>
映射到 List<Class>
?
用例:我从 Webservice 得到一个带有字符串列表的 class,但在我的 MVC Viewmodel 中,我想要 Class 而不是单个 属性,它具有字符串的值。这样我就可以将验证属性添加到 属性.
我知道如何将 List 转换为 List,但是我无法通过其他方式工作。
有什么简单的解决办法吗?
您可以使用 Linq 轻松做到这一点。
var newList = oldList.Select(x => new Item(x)).ToList();
你可以这样做:
void Main()
{
AutoMapper.Mapper.CreateMap<string,A>()
.ForMember(a => a.Name, m => m.MapFrom(s => s));
new[] {"A", "B"}.Select (AutoMapper.Mapper.Map<A>).Dump();
}
class A
{
public string Name { get; set; }
}
(Linqpad 代码)
但我认为这可以作为过度工程的教科书示例。就像丹尼尔的例子一样。
使用 AutoMapper 执行此操作的方法是使用 .ConstructUsing
:
Mapper.CreateMap<string, Class>()
.ConstructUsing(str => new Class { MyProp = str });