gpt4 book ai didi

c# - AutoMapper 和有条件地对子集合进行排序

转载 作者:行者123 更新时间:2023-12-04 11:21:27 24 4
gpt4 key购买 nike

我有一个对象图,我使用 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 集合进行排序。
如果 SortBarByName 为真,我想按名称对 BarDto 进行排序,如果 SortBarByName 为假,则根据 SortOrder 对 BarDto 进行排序,基于类 Foo 的 SortBarByName 属性。

注: Name 属性不存在于 Bar 类中,它只存在于 BarDto 中。

我可以在 AutoMappers 中做些什么来实现这一目标吗?

最佳答案

由于您要用于订单的属性之一仅可用 您映射的数据可以使用 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在所有数据可用之后。

关于c# - AutoMapper 和有条件地对子集合进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53257167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com