AutoMapper и сортировка дочерней коллекции условно - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть граф объектов, который я загружаю из базы данных, используя Fluent NHibernate и AutoMapper в DTO: -

public class Foo
{
  public int Id { get; set; }
  public virtual ICollection<Bar> Bars { get; set; }
  public bool SortBarByName
}

public class Bar
{
  public int Id { get; set; }
  public int SortOrder { get; set; }
  public virtual Foo Foo { get; set; }
}

Мои отображения выглядят так: -

public class FooDto
{
  public IEnumerable<BarDto> Bars { get; set; }
}

public class BarDto
{
  public string Name { get; set; }
  public int SortOrder { get; set; }
}

Мое отображение выглядит так:

mapper.CreateMap<Foo, FooDto>().ForMember(d => d.Bars, o => o.MapFrom(s => s.Bars));
mapper.CreateMap<Bar, BarDto>();

Когда я возвращаю FooDto, я хочу, чтобы коллекция BarDto сортировалась на основе следующих условий. Я хочу отсортировать BarDto по имени, если SortBarByName равно true, или по SortOrder, если SortBarByName равно false, на основе свойства SortBarByName класса Foo.

Примечание: Свойство Name отсутствует в классе Bar, оно только в BarDto.

Можно ли что-то сделать в AutoMappers для достижения этой цели?

1 Ответ

0 голосов
/ 12 ноября 2018

Поскольку одно из свойств, которое вы хотите использовать для заказа, доступно только после , вы отобразили данные, которые вы можете использовать AfterMap() в AutoMapper, например:

mapper.CreateMap<Foo, FooDto>()
                .AfterMap(
                    (foo, dto) =>
                    {
                        dto.Bars = foo.SortBarByName
                            ? dto.Bars.OrderBy(x => x.Name)
                            : dto.Bars.OrderBy(x => x.SortOrder);
                    });

Это следует заказать Bars после того, как все данные доступны.

...