Допустим, у меня есть класс в который вложена коллекция объектов другого класса.
Наружу я хочу отправлять плоскую модель.
Скажем было так:
var class1=new Class1("Бла Бла Бла", new List<Class2>(){new Class2("Бла2"),new Class2("Бла3")})
А в итоге хочу получить вот такой результат:
var dtoClassList=new List<DtoClass>(){new DtoClass("Бла Бла Бла","Бла2"),new DtoClass("Бла Бла Бла","Бла3")}
Можно ли как-нибудь добиться такого через AutoMapper?
Пока пришел к такому способу:
Делаю настройку отображения class1 на dtoClassList Делаю настройку отображения class2 на dtoClassList
Далее через SelectMany создаю плоскую коллекцию из class1. Далее в цикле foreach создаю DtoClass и вызываю на этот объект
_mapper.Map(class1, dtoClass );
_mapper.Map(Class2, dtoClass );
и добавляю в результирующую коллекцию.
Может быть можно проще?
Возможно вам подойдет использование кастомного TypeConverter
:
public record Class1(string name, List<Class2> list);
public record Class2(string name);
public record Dto(string class1Name, string class2Name);
public class FlatConverter : ITypeConverter<Class1, List<Dto>>
{
public List<Dto> Convert(Class1 source, List<Dto> destination, ResolutionContext context)
=> source.list
.Select(class2 => new Dto(source.name, class2.name))
.ToList();
}
// ...
cfg.CreateMap<Class1, List<Dto>>().ConvertUsing<FlatConverter>();
// данные из вашего примера
var class1 = new Class1(
"Бла Бла Бла",
new List<Class2>()
{
new Class2("Бла2"),
new Class2("Бла3")
});
var dto = mapper.Map<List<Dto>>(class1);
dto
будет содержать список классов, где одно поле взято из родительского класса, второе из дочернего.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как сохранить простой словарь Dictionary <int, string> в Unity?
Пытаюсь сделать переключение места появления(transform) в одном моём проектеВыглядеть это должно так: в главном меню игры игрок выбирает точку...
Собственно, в чем разница и что лучше использовать повсеместно и в каких случаях?
Доброго времени сутокСуть такая, есть клиенты (приложения Windows) и нужно сделать на них синхронизацию данных