Вы можете использовать Select()
на коллекции TagDevice
s, чтобы преобразовать ее в список TagDisplayDto
s:
CreateMap<Device, DeviceDisplayDto>()
.ForMember(deviceDisplayDto => deviceDisplayDto.Tags, options =>
options.MapFrom(device => device.TagDevices.Select(tagDevice => new TagDisplayDto
{
CarrierId = 123, // TODO
CreatedAt = DateTime.UtcNow, // TODO
Id = tagDevice.TagId,
Name = tagDevice.Tag.Name,
TimesUsed = 0, // TODO
UpdatedAt = DateTime.UtcNow, // TODO
}).ToList()));
Я пометил некоторые свойства как TODO, так как не знаю всегомодель, которую вы используете, и некоторые свойства отсутствуют. Вам нужно будет заполнить его самостоятельно. По крайней мере, этот код должен помочь вам начать работу.
Edit # 1
Как и предполагал Люциан, еще лучшим решением является полное использование функциональности AutoMapper. Создайте сопоставления между двумя моделями:
- от
Device
до DeviceDisplayDto
- от
TagDevice
до TagDisplayDto
CreateMap<Device, DeviceDisplayDto>()
.ForMember(deviceDisplayDto => deviceDisplayDto.Tags, options =>
options.MapFrom(device => device.TagDevices));
CreateMap<TagDevice, TagDisplayDto>()
.ForMember(tagDisplayDto => tagDisplayDto.CarrierId, options =>
options.MapFrom(tagDevice => 123)) // TODO
.ForMember(tagDisplayDto => tagDisplayDto.CreatedAt, options =>
options.MapFrom(tagDevice => DateTime.UtcNow.AddDays(-60))) // TODO
.ForMember(tagDisplayDto => tagDisplayDto.Id, options =>
options.MapFrom(tagDevice => tagDevice.TagId))
.ForMember(tagDisplayDto => tagDisplayDto.Name, options =>
options.MapFrom(tagDevice => tagDevice.Tag.Name))
.ForMember(tagDisplayDto => tagDisplayDto.TimesUsed, options =>
options.MapFrom(tagDevice => 0)) // TODO
.ForMember(tagDisplayDto => tagDisplayDto.UpdatedAt, options =>
options.MapFrom(tagDevice => DateTime.UtcNow)); // TODO
ТоКстати, логика отображения, определенная выше, является многоразовой. Как и в моем первом решении, вам придется самостоятельно заполнить свойства, отмеченные TODO
.