[英]Seems we can only use the conditional operators (? :) in AutoMapper with ProjectTo - is there anyway to use a switch expression instead?
我有一些映射,例如:
CreateMap<TrophyTransfer, TrophyTransferSaveDto>()
.ForMember(x => x.ReceiverName, opt => opt.MapFrom(y =>
y.ReceiverType == TrophyOwnerTypes.ExhibitionMuseum
? y.ExhibitionMuseum!.Name
: y.ReceiverType == TrophyOwnerTypes.TaxidermyWorkshop
? y.TaxidermyWorkshop!.Name
: y.Owner!.Name));
這工作正常但根本不可讀,這也是一個簡單的例子想象這里有 5-6 個其他條件......
我想使用 switch 表達式或者至少 if/else 來編寫這個映射,但是因為這個( MapFrom
)需要一個表達式我不能這樣做。
就像是:
return y => y.ReceiverType switch
{
TrophyOwnerTypes.ExhibitionMuseum => y.ExhibitionMuseum!.Name,
TrophyOwnerTypes.TaxidermyWorkshop => y.TaxidermyWorkshop!.Name,
_ => y.Owner!.Name
};
此外,我確實嘗試了接受Func
的MapFrom((src, dest))
的其他重載,但由於投影部分,我無法使用它。 ( ProjectTo<>
方法)
除了投影功能之外,還有更好的方法來編寫這些映射嗎?
我使用的典型方法是 map 跨越顯式值,然后有一個未映射的屬性,其中包含訪問/序列化屬性時要評估的邏輯:
[Serializable]
public class TrophyTransferSaveDto
{
// ...
public TrophyOwnerTypes ReceiverType { get; set; }
public string OwnerName { get; set; }
public string ExhibitionMuseumName { get; set; }
public string TaxidermyWorkshopName { get; set; }
public string ReceiverName
{
get { return ReceiverType == TrophyOwnerTypes.ExhibitionMuseum
? ExhibitionMuseumName
: ReceiverType == TrophyOwnerTypes.TaxidermyWorkshop
? TaxidermyWorkshowName
: OwnerName
}
}
然后 map 來自其來源的各種名稱,在這些關系不存在的情況下將為#null。 ReceiverName 將被映射為Ignore
。 它可能應該處理與 ReceiverType 關聯的 Name 是#null 的地方,那里有無效的數據組合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.