gpt4 book ai didi

silverlight - AutoMapper 根据源中的属性值忽略集合中的项目

转载 作者:行者123 更新时间:2023-12-04 20:01:52 24 4
gpt4 key购买 nike

我正在将 ApplianceViewModel 映射到 ApplianceDTO。每个 Appliance 都有一组映射到 ActionDTO 的 ActionViewModel。我想要做的是将映射器配置为忽略 IsPersisted 值为 False 的 ActionViewModel。

我的 ViewModel 类 ...

public interface IApplianceViewModel : INotifyPropertyChanged
{
ObservableCollection<IActionViewModel> Actions { get; set; }
// other properties removed for simplicity
}

public interface IActionViewModel : INotifyPropertyChanged
{
bool IsPersisted { get; set; }
// other properties removed for simplicity
}

我的 DTO 类 ...

public class ApplianceDTO
{
public IEnumerable<ActionDTO> Actions { get; set; }
// other properties removed for simplicity
}

public class ActionDTO
{
// properties removed for simplicity
}

我这样设置我的映射......

Mapper.CreateMap<IApplianceViewModel, ApplianceDTO>();
Mapper.CreateMap<IActionViewModel, ActionDTO>()

var appliance = new ApplianceViewModel {
Actions = new ObservableCollection<IActionViewModel>(
new List<IActionViewModel> {
new ActionViewModel { IsPersisted = true },
new ActionViewModel { IsPersisted = false }
}};
var applianceDTO = Mapper.Map<IApplianceViewModel, ApplianceDTO>(applianceDTO);

目前,我的 applianceDTO 的 Actions 集合中有两个项目,但我想设置我的映射,以便不映射 IsPersisted 属性设置为 false 的 ApplianceActionViewModel。我可以这样做吗?

更新

Omu 的评论让我想到了一个使用 ValueResolver 来映射 Actions 集合的解决方案。我对这个解决方案不是很满意,但它是可用的最佳选择。

首先,我创建了一个自定义的 ValueResolver。

public class IsPersistedCollectionResolver : ValueResolver<IApplianceViewModel, IEnumerable<ActionDTO>>
{
protected override IEnumerable<ActionDTO> ResolveCore(IApplianceViewModel source)
{
return Mapper.Map<IEnumerable<IActionViewModel>, IEnumerable<ActionDTO>>(source.Actions.Where(x => x.IsPersisted));
}
}

然后我修改了我的代码以在映射配置中使用它。

Mapper.CreateMap<IApplianceViewModel, ApplianceDTO>()
.ForMember(dest => dest.Actions, opt => opt.ResolveUsing<IsPersistedCollectionResolver>());
Mapper.CreateMap<IActionViewModel, ActionDTO>();

最佳答案

你有没有试过做这样的事情:

Mapper.map(objects.Where(o => o.IsPersisted == true))

关于silverlight - AutoMapper 根据源中的属性值忽略集合中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3161440/

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