簡體   English   中英

似乎我們只能在帶有 ProjectTo 的 AutoMapper 中使用條件運算符 (? :) - 無論如何都可以使用 switch 表達式嗎?

[英]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
 };

此外,我確實嘗試了接受FuncMapFrom((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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM