2011-01-11 5 views
0

簡単な質問 - 次の違いは何ですか?Automapper ConfigurationExpression条件

この1作品:

CreateMap<OrderResult, OrderViewModel>() 
    .ForMember(x => x.SoldTo, opt => opt.Ignore()) 
    .ForMember(x => x.ShipTo, opt => opt.Ignore()) 
    .ForMember(x => x.ShowPlaceOrder, opt => opt.MapFrom(c => c.Messages.Count == 0)); 

私はこの1つは除いてほとんど同じことを行うことを期待する「Mapper.AssertConfigurationIsValidを();」これは "ShowPlaceOrder"がマップされていないと言って失敗します。

CreateMap<OrderResult, OrderViewModel>() 
    .ForMember(x => x.SoldTo, opt => opt.Ignore()) 
    .ForMember(x => x.ShipTo, opt => opt.Ignore()) 
    .ForMember(x => x.ShowPlaceOrder, opt => opt.Condition(c => c.Messages.Count == 0)); 

おかげ ジョー

答えて

3

条件が真である場合に、あなたはまだShowPlaceOrderのソースを提供する必要があります。 "Condition"メソッドは、マッピングが行われるべきかどうかを決定する述語を取ります。あなたの最初の例がもっとはっきりしていると思います。

+0

opt.Condition()とopt.MapFrom()を一緒に使用してください。 – shatl

+0

私はあなたがこれを行うとは思わない。ブール条件がある場合は、おそらくC#の?:演算子を使用してMapFromの一部として提供します。 – PatrickSteele

+1

@shatl - あなたの質問に誤解しました。 MapFromとConditionの両方が必要な場合は、同じ宛先への2つのForMember呼び出しを作成します.1つはForMemberで、もう1つはConditionで作成します。順序は関係ありません。 – PatrickSteele