如何使用自动映射器将平面模型映射到具有字符串 属性 和 IEnumerable<CustomClass> 的 Class
How to map a flat model to a Class that has a string property and IEnumerable<CustomClass> using automapper
我是自动映射器的新手,想知道如何将平面模型映射到具有 1 个字符串 属性 和 IEnumerable
的 Dto
我有这些类
我想映射这个模型
public class DirectionModel
{
public string DirectionId { get; set; }
public decimal Longitude { get; set; }
public decimal Latitude { get; set; }
}
给这个 DTO 类
public class DirectionDto
{
public string DirectionId { get; set; }
public IEnumerable<CoordinateDto> Coordinates { get; set; }
}
public class CoordinateDto
{
public decimal Longitude { get; set; }
public decimal Latitude { get; set; }
}
示例输入:
IEnum<DirectionModel>()
{
new DirectionModel() {DirectionId="id1", Longitude=1, Latitude=2},
new DirectionModel() {DirectionId="id1", Longitude=3, Latitude=4},
new DirectionModel() {DirectionId="id2", Longitude=5, Latitude=6}
}
这是预期的输出:
IEnum<DirectionDto>()
{
new DirectionDto() {DirectionId="id1", IEnum<CoordinateDto>(){new CoordinateDto(){Longitude=1, Latitude=2}, new CoordinateDto(){Longitude=3, Latitude=4}}},
new DirectionDto() {DirectionId="id2", IEnum<CoordinateDto>(){new CoordinateDto(){Longitude=5, Latitude=6}}},
}
(编辑:更正了可能造成混淆的示例输入)
你可以在AutoMapper
中使用AfterMap
,我更喜欢像这样使用List而不是IEnumerable:
autoMapperConfig.CreateMap<List<DirectionModel>, List<DirectionDto>>()
.AfterMap((model, dto) =>
{
if (dto == null)
dto = new List<DirectionDto>();
if (model.Any())
{
dto.AddRange(model.GroupBy(x => x.DirectionId)
.Select(x => new DirectionDto()
{
DirectionId = x.Key,
Coordinates = x.ToList()
.Select(c => new CoordinateDto()
{
Latitude = c.Latitude,
Longitude = c.Longitude
}).ToList()
}).ToList());
}
});
并使用它:
var lists = new List<DirectionModel>()
{
new DirectionModel() {DirectionId = "id1", Longitude = 1, Latitude = 2},
new DirectionModel() {DirectionId = "id1", Longitude = 3, Latitude = 4},
new DirectionModel() {DirectionId = "id2", Longitude = 5, Latitude = 6}
};
var dtos = _mapper.Map<List<DirectionModel>, List<DirectionDto>>(lists);
我是自动映射器的新手,想知道如何将平面模型映射到具有 1 个字符串 属性 和 IEnumerable
的 Dto我有这些类
我想映射这个模型
public class DirectionModel
{
public string DirectionId { get; set; }
public decimal Longitude { get; set; }
public decimal Latitude { get; set; }
}
给这个 DTO 类
public class DirectionDto
{
public string DirectionId { get; set; }
public IEnumerable<CoordinateDto> Coordinates { get; set; }
}
public class CoordinateDto
{
public decimal Longitude { get; set; }
public decimal Latitude { get; set; }
}
示例输入:
IEnum<DirectionModel>()
{
new DirectionModel() {DirectionId="id1", Longitude=1, Latitude=2},
new DirectionModel() {DirectionId="id1", Longitude=3, Latitude=4},
new DirectionModel() {DirectionId="id2", Longitude=5, Latitude=6}
}
这是预期的输出:
IEnum<DirectionDto>()
{
new DirectionDto() {DirectionId="id1", IEnum<CoordinateDto>(){new CoordinateDto(){Longitude=1, Latitude=2}, new CoordinateDto(){Longitude=3, Latitude=4}}},
new DirectionDto() {DirectionId="id2", IEnum<CoordinateDto>(){new CoordinateDto(){Longitude=5, Latitude=6}}},
}
(编辑:更正了可能造成混淆的示例输入)
你可以在AutoMapper
中使用AfterMap
,我更喜欢像这样使用List而不是IEnumerable:
autoMapperConfig.CreateMap<List<DirectionModel>, List<DirectionDto>>()
.AfterMap((model, dto) =>
{
if (dto == null)
dto = new List<DirectionDto>();
if (model.Any())
{
dto.AddRange(model.GroupBy(x => x.DirectionId)
.Select(x => new DirectionDto()
{
DirectionId = x.Key,
Coordinates = x.ToList()
.Select(c => new CoordinateDto()
{
Latitude = c.Latitude,
Longitude = c.Longitude
}).ToList()
}).ToList());
}
});
并使用它:
var lists = new List<DirectionModel>()
{
new DirectionModel() {DirectionId = "id1", Longitude = 1, Latitude = 2},
new DirectionModel() {DirectionId = "id1", Longitude = 3, Latitude = 4},
new DirectionModel() {DirectionId = "id2", Longitude = 5, Latitude = 6}
};
var dtos = _mapper.Map<List<DirectionModel>, List<DirectionDto>>(lists);